home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / game / 2play / ChaosHeavy.lha / Chaos / History2000.txt < prev    next >
Text File  |  2001-05-04  |  429KB  |  10,219 lines

  1.  
  2. ****************************************************************************
  3.                       Information Screens Upgrade
  4. ****************************************************************************
  5.  
  6. For the next upgrade I will be doing fancy screen manipulation in order to
  7. achieve smooth scrolling AND to be able to utilize a wide range of
  8. different screens which will all use the exact same chunk of memory.
  9.  
  10. This will allow the game to use a minimum amount of chipram and avoid memory
  11. fragmentation from constantly opening and closing screens.
  12.  
  13. Using clever arrangement of the screen memory, we will be able to display
  14. e.g. 3 screens at once which will trash the display of all the other
  15. screens, but as those other screens won't be visible, noone will ever know.
  16. When switching back to the original display, the previous 3 screen display
  17. will be trashed, but as it will no longer be visible, nobody will ever
  18. know.
  19.  
  20. Using this technique we can have a dozen different screens open at once,
  21. all using overlapping chipram.  It will simply be a matter of pushing the
  22. correct screens to the front and using them to generate the proper display.
  23.  
  24. In order for this technique to work, the screens must be in interleaved
  25. format because interleaved format utilizes memory more efficiently.
  26.  
  27. Also, interleaved screens allow general blitter operations to be faster so
  28. hopefully all those DrawImage() calls will be a bit faster.
  29.  
  30.  
  31. Pointers:
  32.  
  33. -------------------------------------------------------------------------
  34. Display1: NormalDisplay 320x256x6 main screen + 640x256x3 hires screen.
  35.                         61440 bytes           + 61440 bytes = 122880 bytes total
  36.  
  37. Base=HiResScreen
  38. Base+ 61440 LoResScreen. (main map)
  39. -------------------------------------------------------------------------
  40.  
  41. Display2: ScrollPanel1Display: 640x1024x4 autoscroll screen + 320x32x6 screen to display the icon.
  42.                                327680 bytes                 + 7680 bytes = 335360 bytes.
  43.  
  44. Base+7680=SP1SmallLoResScreen (320x32x6) (7680 bytes)
  45. Base+7680+7680=SP1HiResAutoScrollScreen(640x1024x4) (327680 bytes)
  46. -------------------------------------------------------------------------
  47.  
  48. Create various other displays here...
  49.  
  50.  
  51.  
  52. Base+7680 = LoresScreen on standard info panel.
  53. Base+7680+whatever = HiResScreen on standard info panel.
  54. Base+7680+whatever+whatever= HiResScrollingScreen on standard info panel.
  55.  
  56.  
  57.  
  58. * 1: Change all screens to Interleaved.  Make neccessary JC-code
  59.      adjustments to open and setup the screens in interleaved mode. DONE.
  60. * 2: Change lores screen to be 64 colors and the shadowboard too.  This
  61.      prepares for the final and ultimate ECS version.  DONE.  Hmmm.. the
  62.      quadrascopes are now slower.
  63. * 3: Adjust asm testpixel code to work with interleaved bitmaps and 64 colors.
  64.      TestPixel4_320 is now TestPixel5_320 and it only works on Interleaved BitMaps
  65.      with 6 bitplanes.
  66.      TestPixel1_320 now only works on Interleaved Bitmaps of 6 bitplanes.
  67.      ALL DONE.
  68.  
  69.      YIKERS!  64 color mode drains so much DMA time from the chipram that
  70.      now if you move the mouse on the New Game? or End Turn? screens the gfx
  71.      slow down dramatically!   Perhaps these should be redone on 32 color
  72.      screens for speed?
  73.  
  74. * 4: Adjust asm DoTheHighlighting and UnDoTheHighlighting to work with the
  75.      new 64 color interleaved screens.  DONE.
  76.  
  77.      WOW!  Pressing "l" for line of sight still goes at a nice fast speed
  78.      even though it is testing an extra bitplane now and even though the
  79.      available bandwidth for testing chipram has been cut in half.
  80.  
  81. * 5: 64-bit aligned the double-buffering of the rotating pentagrams. DONE.
  82.  
  83. * 6: REMOVED all that conditional OS 1.2 / 1.3 code from info.c.
  84.  
  85. Display3: ScrollPanel2Display: same old way for now.
  86.  
  87. Display4: FileRequesterScreen. Noninterleaved.  For Loading and Saving.
  88.  
  89. * 7: Allocate the screenmem as 1 big chunk then subdivide it in an
  90.      overlapping manner for the various displays and screens.
  91.      A. Allocate 1 chunk of 343040+4 bytes of chipram. (This is the largest
  92.         chunk currently needed) 640x1024x4 + 7680+7680 DONE.
  93.      B. Setup the bitmap pointers appropriately. DONE.
  94.      C. Open up the 2 new screens.  Put the 2 new ones in back for now. DONE
  95.      D. Open the appropriate window on each screen. DONE.
  96.  
  97. * 8. Install TypeSmith 2.5b.  DONE.
  98.      Ok, TypeSmith is really awesome because it can load and edit
  99.      PostScript, Compugraphic, TrueType and Amiga Bitmap fonts!
  100.      However, there is no way to see how the chars will actually look in
  101.      their normal size while you are editing them so I had to use Deluxe Paint 5
  102.      and keep switching screens back and forth.  It worked ok.  It is clear
  103.      that TypeSmith was designed to edit scalable fonts rather than bitmap
  104.      fonts.  I needed a break from programming so I stayed up all night
  105.      designing a bitmap script font that looks really GREAT!
  106.  
  107.      Unbelievably, there is no way to change the width of a bitmap
  108.      character from within TypeSmith so I wrote my very first Arexx program!
  109.      WOW!  Arexx is totally kewl!  The Arexx port on TypeSmith is very
  110.      nice.  I made a script in 8 minutes (including the time to look up the
  111.      commands in the online help) that allows me to change the width of chars.
  112.      It even worked perfectly on the first try!
  113.  
  114.      I was going to make the ChaosCalligraphy font be 44 points tall for use
  115.      on the scroll info panels.  This looks AMAZINGLY FANTABULOUS, but then
  116.      I realized this would be too big for use on the standard info panels so I
  117.      squished it down to 40 points so now it could theoretically be used on
  118.      the standard info panels also.  The 40 point font doesn't look as awesome
  119.      as 44 but it still looks ok.
  120.  
  121. * 9. Design Awesome Calligraphy Font: ChaosCalligraphy.font/40  9356 bytes DONE.
  122.  
  123. *10. Implement new ScrollDisplayPanel1
  124.      A. Correctly position the screens and print text to them using the
  125.         same old font as always in order to test the AUTOSCROLLing.
  126.  
  127.         Ok, I have now wasted quite a few hours trying to get AUTOSCROLLing
  128.         to work.  The docs don't fully explain it.  I finally figured it out
  129.         after much trial and error.  I now know how AUTOSCROLL works
  130.         HOWEVER it is useless on a child screen because the scrolling is
  131.         somehow constrained by the parent screen!  Grrr.. I consider this
  132.         to be a bug in the OS.
  133.  
  134.         AUTOSCROLLING isn't really required.  But opening a LARGE screen
  135.         which can be manually scrolled IS required.  In each test where
  136.         AUTOSCROLLING failed, manual scrolling failed also.
  137.  
  138.         So here are my options for making the AUTOSCROLL
  139.         ScrollInformationPanel work:
  140.  
  141.         1) Don't attach it to the parent screen.  Then it works.  The
  142.            trouble is then there are 2 open screens in the system and that
  143.            annoys people.
  144.  
  145.         2) Do #1 but build in some amiga-m/n detection code into Chaos so
  146.            that we automatically depth arranged BOTH screens at once.  The
  147.            trouble with this idea is #1: I don't know how to do it and #2
  148.            I doubt if it would even work.
  149.  
  150.         3) Try to open the parent screen with fake higher top so that it
  151.            can move up higher.  Thus the child screen will also be able to
  152.            move higher.  The trouble with this idea is I don't think you can
  153.            just go  around opening screens with fake tops.  I would try this
  154.            idea except for 1 MAJOR problem: when the parent screen becomes
  155.            AUTOSCROLL in the future, having a fake top means it will AUTOSCROLL
  156.            incorrectly! grrr.
  157.  
  158.         4) Figure out some way to poke into the screen->viewport or
  159.            whatever and force this to work by making it not be a child
  160.            screen anymore or by changing the clip in the viewport or something??
  161.            I TRIED THIS AND IT DIDN'T WORK. 8(
  162.  
  163.         5) Make the SP1HiResAutoScrollScreen be the parent screen.  If its
  164.            the parent it should be able to AUTOSCROLL.  The problem with
  165.            this is that I don't think it will work because all the other
  166.            child nondraggable screens will constrain it from scrolling off
  167.            the top.
  168.  
  169.         6) Constantly keep reopening and closing the scroll screens.
  170.            It takes 25 frames (half a second) to open the 640x1024x4 screen
  171.            and window.  It takes 34 frames to open that screen/window + the
  172.            SmallLoRes Screen and Window.  This is entirely too long to wait.
  173.  
  174.         7) Open 2 child screens of 640x512 each and flip between them when
  175.            moving the mouse or pressing an arrow key.
  176.  
  177.         8) Somehow use ScrollVPort() to do the scrolling on the 640x1024
  178.            child screen.  The problem with this is that experience has
  179.            shown ScrollVPort to NOT BE FAST ENOUGH.  AUTOSCROLL is
  180.            PERFECTLY smooth and so is MoveScreen() but ScrollVPort() is
  181.            screwed up.
  182.  
  183.         9) Temporarily make SP1HiResAutoScrollScreen be the parent screen.
  184.            This should allow it to autoscroll correctly.  Then later on
  185.            when the map becomes an AUTOSCROLL screen and the 2 screens
  186.            conflict with each other, I'll just make the 2 SP1 screens into
  187.            their own separate family.  Thus there will then be 2 open
  188.            screens in the system at that point.
  189.            This might also necessitate making the HiResScreen be DRAGGABLE
  190.            again.  Hmmm...
  191.            DONE.
  192.  
  193. * NEW FUNCTION: RedrawRightHandSide() to redraw whatever needs to be
  194.   redrawn on the right hand side of the map screen. (spell list or gadgets or
  195.   whatever.  DONE.
  196.  
  197.      B. Adjust colors.  DONE.
  198.      C. Implement Stefan Burstroem's FastTextFit.asm into the makefile.
  199.         The only problem is there are no docs for the routine!
  200.         I eliminated the TextExtent parameter since it was not used. DONE.
  201.  
  202. * BUG: the FastTextFit asm code has a bug so that it usually returns 1
  203.        higher than the correct result.  NOW FIXED.
  204.  
  205.      D. Implement new 40 pt. calligraphy font on the new Scroll Info Panel.
  206.         DONE.
  207.      E. Rewrite the PRTPool() function so that the entire text is
  208.         decompressed all at once into a buffer then that buffer must be processed
  209.         using FastTextFit() to fit the text onto the screen 1 line at a time.
  210.         I ended up completely rewriting printer.c.   DONE.
  211.      F. I had to change PRT_WIDTH to be 1025  DONE.
  212.      G. Since I am rewriting printer.c I have converted it to JC.  DONE.
  213.  
  214. * BUG! My pearl.font TextAttr was using FPB_DISKFONT instead of the correct
  215.   FPF_DISKFONT!  This explains why the pearl.font never worked on my OS 1.3
  216.   Amiga 2000 and why it never seemed to work on my dad's A500 or A3000.
  217.   Using FPB_DISKFONT is equivalent to FPF_ROMFONT so it APPEARED to work on
  218.   my computer because my preferences are set to use pearl.font as the default
  219.   system font.  This means that NOBODY has been seeing the correct font all
  220.   this time except for me!  ARRRGGHH!!!   NOW FIXED.
  221.  
  222. * December 16th: First panel of the new scroll display is finally ALL DONE.
  223.   Most spell descriptions fit onto 1 screen with the small 40 point font so
  224.   the AUTOSCROLLing is not usually used.
  225.  
  226. *11. Implement new ScrollDisplayPanel2
  227.      Hmmm.... How should I do this?
  228.      A. Have another screen which is only 640x512 and display the info on
  229.         that screen?
  230.      B. Simply erase the autoscroll screen and display the data on it?
  231.      C. Simply erase the bottom half of the autoscroll screen and display
  232.         the data on the bottom half and smooth scroll it up?
  233.      ARRGH I can never decide how to do these things!
  234.  
  235.      I guess I'll just do option A.  DONE.
  236.  
  237. * Utilized some trickery to stop the ScrollPanel1 from scrolling when there
  238.   is only 1 screen of text.  DONE.
  239.  
  240. * Implement Anti-Aliased, Anti-Flicker text.  Technically this is
  241.   anti-flicker text, but it also partially antialiases too.  DONE.
  242.  
  243. * TOO SLOW: On my 25 Mhz 68030 it takes 65 frames to bring up the description
  244.   of the Cobra.  I added in some Mask stuff and rearranged the colors but it
  245.   still takes 44 frames.  It takes 5 frames to decompress the text, the
  246.   other 39 frames are displaying the text in the dead slowest graphics mode
  247.   of ECS.
  248.  
  249.   If anyone complains about it being to slow I can do one or more of the
  250.   following:
  251.   Use the fake 1 bitplane screen.
  252.   Add an extra pixel between lines and use the BltBitMap() technique.
  253.   Change to noninterleaved and write an asm routine to zap the text up real
  254.   fast.
  255.   Switch down to 8 colors?
  256.   Design the font as a colorfont.
  257.   Design the font as 2 fonts.  1 is the normal font an the other is just
  258.   the antialiasing.
  259.   Try a minterm of 0x77 or 0xEE
  260.  
  261.   I at least need to do the fake screen thing between SP1 and SP2 to cover
  262.   up the sloppiness + speed it up greatly!
  263.  
  264. * IMPLEMENTED: fake 1bpl screen at beginning of SP1 and again between SP1 and
  265.   SP2.  Damn it still takes 21 frames for the Cobra description.  35 frames
  266.   for gooey blob!
  267.  
  268. * DISABLED CLIPPING: during the text printing only.  NO EFFECT.  8(
  269.  
  270. * Tried JAM2 mode: NO EFFECT. 8(
  271.  
  272.   I could do this:  Text() the text to a seperate bitmap buffer.
  273.   
  274.   move.l (bitmapbuffer)+,d0
  275.   move.l  d0, (FastRamBufferbpl1Y+1)+
  276.   or.l    d0, (FastRamBufferbplY-1)+
  277.   That simple loop will generate the antialiasing.
  278.  
  279.   move.l d0,(FastRamBufferbpl2Y)+ ; to copy the main text also.
  280.  
  281.   Then just copy the bitplanes to the appropriate planes of the screen and
  282.   that is all.  Maybe I'll do something like this someday.  But I'll
  283.   probably never get around to it.  It doesn't apply to gfx cards.
  284.  
  285. * NEW POWERUPS shown on Info Screen: Crystal Ball, Ubiquiscope, Seismology,
  286.   Cartography, Telescope, Alternography, Fly, Earthbind, Archery,
  287.   Nonarchery, Lich/Convert/Materialize/Undead/NotUndead, Sword of Sassenrath,
  288.   Mount, NoMount, NoGrow, StoneToFlesh, Inanimorphobiosis, FleshToStone.
  289.  
  290.   I intentionally left out Cursed Sword because its graphic currently looks
  291.   identical to a regular Magic Sword.
  292.  
  293. * PROBLEM: If the game locks up we can't just press CTRL-C to break into
  294.   the program.  I have now set it so CTRL-C will work in the developer
  295.   version.  DONE.  hmmm... doesn't seem to have any effect.
  296.  
  297.  
  298. *12. Implement new InfoPanelDisplay1  IF -i option (InterlaceMode) is set have
  299.      it in interlace else have it in non interlace, the old way.
  300.  
  301.      In other words leave the existing info panel 1 code intact.  Just add
  302.      in an IF (InterlaceMode) InformationPanelInterlace(); return;
  303.      InformationPanelInterlace() will call the InformationPanelInterlace1();
  304.      A. Open 2 new interlace screens with windows.  DONE.
  305.  
  306. *13. Implement new InfoPanelDisplay2 DONE.
  307.     
  308. *14. Implement Antialiased text on the new IP1 displays DONE.
  309.      (this requires a minimum of 16 colors)
  310.  
  311. *15. Implement antialiased bargraph boxes to reduce flicker on 1084S monitors.
  312.      DONE.
  313.  
  314. *16. Implement color cycling on the new IP1 displays.  Oops color clash.
  315.      The original color cycling worked by cycling HIRESGREEN2, but this
  316.      color is being used to display the owner.  Ok I will use HALFHIRESBLACK
  317.      and HALFHIRESGREEN1 for the color cycling colors.
  318.  
  319.      Or I might create yet another screen so that the creature name + owner
  320.      can have its own 16 color pallette on ECS.  Or its own 256 color pallette
  321.      or whatever on AGA.
  322.  
  323.      COLOR CYCLING DONE.
  324.  
  325. *17. Redo the halfIP1HiResColors to be halfway between the new darkblue
  326.      background and the real color to reduce flicker.  DONE.
  327.  
  328. * PROBLEM: the cyan rectangular boxes flicker quite badly on a 1084S
  329.   monitor even when antialiased.  Solution: draw the rectangles in a darker
  330.   color.  DONE, but it strangely doesn't seem to reduce the flicker any.
  331.   Its very difficult to keep long narrow horizontal lines from flickering
  332.   in interlace.
  333.  
  334. *18. ReImplement Level Editor into the new IP1 displays. DONE.
  335.  
  336. * There is a hashing problem.  I need to make it so that when scrollpanel
  337.   exits, clear the whole sp1 display instead of just the map display. DONE.
  338.  
  339. *19. Fix level editing the rest of the way.  Level editor is finally
  340.      working again on Jan. 12, 2000.
  341.  
  342.  
  343. ***************************
  344. *** IP1 Speedup Upgrade ***
  345. ***************************
  346.  
  347. Time to completely display IP1 info panel on 25Mhz 030 A3000:
  348. IP1 display currently takes:       51 frames. A bit over 1 second.
  349. Implement FakeBlueScreen Trick:    30 frames.
  350. Just for fun I commented out
  351. SetRast (IP1HiResRastPort, BLACK); 23 frames.  Indicating it takes 7 frames
  352. to do SetRast while a 64-color lores screen is being displayed.
  353. Commented out
  354. RectFill(pr,0,0,320,65);           22 frames. Indicating it takes almost 1
  355. frame just to do that in 64 color mode.
  356.  
  357. Ok now I'm timing how long it takes to do the rectfill + setrast while
  358. in lores 1 bitplane mode (by pushing fake1bplscreen to front)
  359.                                    27 frames.
  360.                                    25 frames on nothing/nobody.
  361.                                    19 frames by #ifndefing out the current and max numbers.
  362.  
  363. Implement CopyMemQuick Trick: should be 9 or 10  frames.
  364.                                    15 frames.
  365.                                    14 frames on nothing/nobody.
  366. Eliminated 2 ScreenDepth() calls   14 frames.
  367.                                    13 frames on nothing/nobody.
  368.  
  369. * Optimize PutScreen() to not move the screen if it is already in the correct
  370.   position. DONE.  This effectively eliminates 2 PutScreen Calls.
  371.  
  372.                                    12 frames on nothing/nobody.
  373.  
  374. * Change all the colors from HiResYellow to IP1HiResYellow etc. DONE.
  375.  
  376. * Make HalfHiResYellow be color 1.  Mask = 1 when writing the antialias color.
  377.   Make HiResyellow be color 9. Mask = 9 when writing the HiResYellow.
  378.   Should double the speed of number printing from 6 frames to 3 frames.
  379.   So I am just switching the positions of IP1HiResYellow<->IP1HiResGreen1
  380.   DONE.
  381.                                     10 frames on nothing/nobody.
  382.   TOTAL SPEED INCREASE:  5.1x
  383.  
  384. ******************************
  385. *** END IP1 Speedup Ugrade ***
  386. ******************************
  387.  
  388. * Make the small IP1SmallLoResScreen be really small in the OpenScreen()
  389.   command.  This will fix that lame glitchiness permanently!
  390.   DONE.
  391.   Ok, the glitchiness is fixed but now the mouse pointer teleports in order
  392.   to stay within the bounds of the small screen.  This is very annoying.
  393.   So my options now are:
  394.   A: Revert IP1SmallLoResScreen to be a full 512 pixels high and suffer
  395.      with a glitchy display (the glitch is only displayed for 1 frame)
  396.   B: Do option A + install a UserCopperList to set all colors to the
  397.      background color.  This would fix the glitch.  But I have no idea how
  398.      to install such a UserCopperList.
  399.   C: Keep the screen small and just keep track of the mouse position and
  400.      restore it.  This should work but will cause a "mouse-pointer glitch".
  401.      There is no easy way to do this.  I'll hafta hack some code in to make
  402.      this work.  Special thanx to Kalsu for supplying me some example code for
  403.      this.  This is the option I will attempt.
  404.   D: Leave the small screen small and make the big screen be 512 pixels.
  405.      Put the big screen at the top of the display and the small one at the
  406.      bottom.  This would solve all the problems.  But then we would have
  407.      the pic of the creature and the powerups and kills at the bottom of the
  408.      screen. This is the easiest way to fix it. How do you feel about this?
  409.   E: Try setting BORDERSPRITES to see if that fixes things.
  410.      I really don't want the mousepointer going into the side borders.  I
  411.      only want it to go into the bottom border area.  But there is no way to
  412.      specify this so I'm not going to try this option.
  413.  
  414. * Implement Option C by making a function MoveMousePointer(x,y) DONE
  415.  
  416.   It basically works but the mousepointer flickers and jerks because its
  417.   being moved around.  So I'm now going to try Option
  418.  
  419. * F: Make the IP1LoResScreen be the full 512 pixels high but in order
  420.      to prevent glitchiness I'll set its color palette so that all 64 colors =
  421.      the background color until the screens are all properly arranged.  Then
  422.      I'll reload the pallette back to its normal setting.
  423.      DONE.  WORKS GREAT.  NO NOTICEABLE SLOWDOWN.  NO MORE GLITCHES.
  424.  
  425.  
  426. *20. Reduce size of IP1HiResScreen and BitMap and Window down from 512 to 443
  427.     (the exact right number) to speed things up.  DONE.
  428.     The IP1 and IP2 displays are now exactly 512 pixels in height.  This
  429.     noticeably increases chipram bandwidth since it has eliminated around 16
  430.     pixels of vertical overscan.
  431.  
  432. *21. Snapshot the base IP1 displays using straight 32-bit CopyMemQuick and
  433.      copy them in for vast speed improvement.
  434.      A. Add in some #ifdef code to cause the numbers and the name and owner
  435.          to not be printed. DONE.
  436.      B. Simply save the memory of the IP1HiResScreen straight to a diskfile
  437.         Screens/IP1HiResScreenMem. 142080 byte file. DONE.
  438.         If I ever do the 2nd screen it can be IP2HiResScreenMem.
  439.      C. Modify start.c to load in the new Screens/IP1HiResScreenMem file. DONE.
  440.      D. Modify info.c to copy the image to the screen instead of using
  441.         all those timeconsuming AntiAliasWriteText() calls.
  442.         Copy IP1HiResBaseDisplay to IP1HiResScreenMem. DONE.
  443.  
  444. * Save mouse coords for SP1 screens. DONE
  445.  
  446. * BUG: Promote() messes up the semaphore when performed on an exposed wizard.
  447.   NOW FIXED.
  448.  
  449. * BUG: Promote() on a scroll can cause enforcer hits. NOW FIXED.
  450. * BUG: Graphics of kills on IP2 screen are messed up.  NOW FIXED.
  451. * BUG: Range is being printed over movement on IP1 screen.  NOW FIXED.
  452. * BUG: Can't be Smelled/heard/seen is in wrong color and wrong position. FIXED.
  453. * BUG: Unexplored Region / Cloaked not erasing IP1 screen.  FIXED.
  454.  
  455.   FLAW: The filerequester uses routines optimized to smoothly scroll on
  456.   NONinterleaved screens.
  457.   SOLUTION: Simply make the HiResScreen NOT be interleaved.
  458.   When I did this the colors got all messed up on the HiResScreen!  I have
  459.   no idea what is going on.  So I'm leaving the screen as Interleaved for the
  460.   time being.
  461.  
  462.   Fix bottom screen glitch.  DONE.
  463.  
  464. * Fix screen dragging.  Make all screens be nondraggable except for the SP1
  465.   screen I suppose.  DONE.
  466.  *1. Simply put the SP1HiResAutoScrollScreen back to x,-512 every time you
  467.      exit the scroll panel.  This will prevent the hiresscreen from moving up
  468.      and revealing garbage. DONE.
  469.  *2. Try making the main map screen (screen) be nondraggable also. DONE.
  470.  *3. Try making the fake1bitplanescreen be nondraggable. DONE.
  471.  *4. Put the SP2 panel into the correct position with PutScreen(). DONE.
  472.  
  473. ****************************************************************************
  474.              January 28, 2000  END Information Screens Upgrade
  475. ****************************************************************************
  476.  
  477. JJ Bug Report for v2.71: ===================================================
  478. * BUG: Promote() doesn't work right.  His Undead Green Dragon: turned into
  479.   a living Emerald Dragon.  Ok I completely revamped Promote() to
  480.   intelligently promote every stat.  NOW FIXED.
  481.  
  482. * BUG in Exploration Mode:
  483.   Jason cast Moveit but when he got his extra move he couldn't see
  484.   anything!  However if he clicked on an "unmapped" square he could still
  485.   move his units.  NOW FIXED.
  486.  
  487. Recompiled v2.71 into v2.72 and reinstalled on his computer.
  488. ==============================================================================
  489.  
  490. ======================================================================
  491. Score Screen Upgrade:
  492. Make it a borderless backdrop window on a 640x512x16 colors interlaced
  493. screen.  Just use SP1HiResWindow.
  494.  
  495. Need 11 lines of text * 40 points = 440 points + 1 blank line = 480 points.
  496. Just 1 screen for now.
  497. Player Scores for Turn x.
  498. Player            Team   Life   Score
  499. 9 lines of name + score.
  500. For now I'll use the same ChaosCalligraphyFont40.  But maybe I'll use a
  501. different one later when I think of a good one to use.
  502. Use Team Numbers instead of graphical symbols.
  503.  
  504. What should the colors be????  I need to use something other than dark
  505. blue for the background!  For simplicity I'll just use the exact same
  506. colors that are already being used. (Black background).
  507. Try to use the SP1HiResScreen for the Score Panel and Spell Panel.
  508.  
  509. Oh well I'm tooo tired to care about the colors now.  I'm just leaving the
  510. colors as they stand.
  511.  
  512. * Score Screen now looks halfway decent at least.
  513. =============================================================================
  514.  
  515.  
  516.  
  517. JJ Complaints   ==============================================================
  518. * COMPLAINT: When playing in (!ExplorationMode and !TexasTrashem) the
  519.   exploration mode related spells should not appear in your spell lists.
  520.   Just make a new tag: OnlyUsefulInExplorationMode
  521.   Spells with this tag will have their probability set to 0 in the
  522.   chaos.prb file.  Their probabilities will be normal in the ExplorationMode.prb
  523.   file.  NOW IMPLEMENTED.  Works great.
  524.  
  525. * Spells which are only useful in ExplorationMode are now only dealt out if
  526.   you play the game in ExplorationMode or in Texas Trash'em mode.
  527.  
  528. * COMPLAINT: He wants a Music OFF feature.  NOW IMPLEMENTED.  Works great.
  529. ================================================================================
  530.  
  531. * FIXED Magic Sword Description.
  532. * FIXED GooeyBlob spell description from "on recovery" to "after being uncovered"
  533.  
  534. CHANGED:
  535. * Ropers, Wasp Nests, Pits, Magic Castles and Dark Citadels can now be cast
  536.   on dead bodies.
  537. * Rocks now allow 3 attempts.
  538. * Combat Drain Beam damage increased to 8.
  539. * Nonarchery is now known as Archerotomy.
  540.  
  541. ****************************************************************************
  542.                          InitialData[] bugs
  543. ****************************************************************************
  544. Previously there were 3 serious bugs related to InitialData[]:
  545. 1. The negative score bug.
  546. 2. The isIDcreature() bug.
  547. 3. The isIDblahblahetc() bugs (numerous macros were broken).
  548.  
  549.  
  550. Current bugs related to InitialData[]:
  551.   chaos.c
  552. * BUG: All the recovery code (life recovery, intelligence recovery, etc.) has
  553.   code that checks the InitialData[id].Life, etc.  But there is NO
  554.   InitialData[id].Life for a magic spell scroll!  So the return result is
  555.   unknown and will be random over time, as spells are changed/added.
  556.   It could possibly cause an enforcer hit.
  557.   NOW FIXED by using the macro.
  558.  
  559. * core.c
  560.   BUG: The code for GooeyBlob uncovering sets:
  561.      b->char_stat.Life =InitialData[b->id].Life >>1;
  562.      But there is no such thing for a magic spell scroll! NOW FIXED.
  563. * The WakeUp() routine has an InitialData[id].Weight which does not exist for
  564.   magic spell scrolls.  NOW FIXED.
  565. * Promote() accesses InitialData[id].Life, etc.  This should only be used with
  566.   creatures so it should not cause any bugs. NOW FIXED.
  567. * All occurences of InitialData[] replaced with InitialData() in core.c
  568.   EXCEPT for InitialData[NOTHING] occurrences.
  569.  
  570. * move.c/Growth() also accesses InitialData[id] but this should only be used
  571.   with growths so it should not cause any bugs.  But a scroll of a growth
  572.   is still a "growth" so it might someday cause a bug, arggh.
  573. * move.c/Growth() more code for uncovering something covered by a growth
  574.   which accesses InitialData[id] for scrolls that have no such thing.
  575. * move.c/Combat() would do an invalid access of InitialData[id] if a magic
  576.   spell scroll had HORROR on it.
  577. * ALL occurrences of InitialData[] replaced with InitialData(), even the
  578.   ones that were technically 100% safe because in future years after new
  579.   object types are added they might become unsafe.  Better safe than sorry.
  580.  
  581. * spell.c/IntelligentComputerSpellSelect() is using the value of
  582.   InitialData[id].Life for scrolls which have no such value!
  583.   Oops the code is actually ok due to it saying "IF (isIDcreature(sp) and InitialData(sp).Life >s[STRONG]"
  584.   I was thinking it said "isCreature" instead of isIDcreature.
  585.   I replaced InitialData[] with InitialData() anyway.
  586.   DONE.
  587.  
  588. * cmove.c/GetCellWeight() is using InitialData[id].FavoriteFood and
  589.   .RunsAwayFrom!  This is wrong for magic spell scrolls.
  590.   Replaced with InitialData() macro.
  591.  
  592.  
  593. There is already quite a lot of hacked-in code for not using InitialData[]
  594. beyond ExitID and I'm wasting too much time fixing silly bugs that never
  595. should have existed in the first place so I'm thinking of implementing the
  596. objects more as a true database and adding InitialData[] for EVERY id.
  597. This will burn 10 or 20k but since it makes the game more reliable, easier to
  598. code and keeps the code cleaner; it should be well worth it.
  599.  
  600. The other option is to hack in some IF-THENs for each of the above listed
  601. cases + we would have to remember to do the same each time we add new code
  602. which uses InitialData[id].
  603.  
  604. A third option is to make some sort of GetInitialData() macro which checks that
  605. the ID is <= ExitID and returns the appropriate value.  Then I just
  606. search/replace all occurences of InitialData[] with GetInitialData()
  607. USING THIS OPTION.
  608.  
  609. #define InitialData(x) InitialData[(x) > ExitID ? 0: (x)]  Not good enough
  610.  
  611. #define InitialData(x) (InitialData[(x) >=0 and (x)<=ExitID ? (x):( (x)<0 or (x)>RevealID ? *(char *)0 : 0))
  612.  
  613. The above macro will be used because it handles the quirkiness of there not
  614. being InitialData for id's over ExitID _AND_ it does array bounds checking!
  615.  
  616. more examples in SC:ArrayBoundsChecking.txt
  617.  
  618. * Replaced all occurences of InitialData[] with InitialData() macro just to
  619.   be safe in cast.c and info.c and init.c and all the spell files.
  620.  
  621.  
  622. Could just have a "magic spell" bit to delineate the 2 regions?
  623.  
  624. * Chaos now has Array Bounds Checking, but only on the InitialData array.
  625.   Currently for the bounds checking to actually report anything you must run
  626.   the game under cpr and have enforcer running.  Then bad subscript errors
  627.   are trapped and the cursor is placed on the offending line just like in
  628.   BASIC.
  629. ****************************************************************************
  630.                       END InitialData[] bugs
  631. ****************************************************************************
  632.  
  633.  
  634. * BUG: Violet Fungi graph has a line drawn through it.  FIXED.
  635.  
  636. * BUG: The right hand side end turn gadget isn't being redrawn when you
  637.   examine an object on the board or a spell in your spell list. FIXED.
  638.  
  639.  
  640. Feb. 15th, 2000:
  641. * Incorporated SAI's new arcing weapon effect on all the elves.
  642.  
  643. Feb. 16th to Feb 22nd: Moving to new apartment.  No programming
  644. accomplished.
  645.  
  646. Feb. 23: Internet account stopped working.  My paid subscription ran out.
  647.  
  648. ==========================================================================
  649. Feb. 23rd to 29th: 
  650. * 10 NEW CREATURES: Mighty Orc, Oracle, OmniBiologist, Recognomancer,
  651.   Memory Master, Memory Mage, Necromancer, Chronomancer, Hippocrates,
  652.   Aesculapius.
  653.  
  654. Mighty Orc who (looks just like an orc / looks like an orc
  655. with a big battleax)  Mighty Orc has stats identical to Orc but with 15
  656. combat. Prob=9.  Orc has PromotionCount=3, promotes to MightyOrcID
  657.  
  658. An Oracle could be equivalent to a Crystal Ball.
  659. Just add a .Oracle bit to the wizardinfo struct and check it along with
  660. .CrystalBall
  661. The Oracle has a Crystal Ball which benefits the casting wizard.
  662. Oracle can use a fakewizard graphic #6.
  663.  
  664. OmniBiologist uses a fakewizard graphic #8.  19 life, 1 combat, 1 move, 0 recover.
  665. The OmniBiologist is a Biologist, Exobiologist, Chronobiologist,
  666. Xenobiologist and Exoplanar-Biologist all rolled into one.  He can
  667. instantly recognize any lifeform from any time-period, or from any other
  668. planet, or even from any other plane of existence.  Upon viewing any
  669. scroll, he can recite from memory the complete statistics for any creature.
  670. If he can make 3 kills he promotes to Recognomancer.
  671.  
  672. Recognomancer  fakewizard graphic #7.  19 life, 1 combat, 1 move, 0 recover.
  673. Either 2 ranged combat against mr (range=3) or make him have actual lightning
  674. bolt spells.  Graphic of Wizard with staff.
  675. The Recognomancer is similar to the Omnibiologist but he carries a deadly
  676. magic staff, making him much more lethal in magic combat.
  677.  
  678. Memory Master   Shade Graphic (stats of Ogre) + .memory bit set
  679. The Memory Master has perfect Eidetic Memory and will always remember what
  680. is under the object in any square on the board.
  681.  
  682. Memory Mage similar to Ogre Mage! Shade graphic. (stats of OgreMage) + .memory bit set.
  683.  
  684. Aesculapius is The Roman god of healing. 0 combat.  -4 combat against all non
  685. recovery rates.  Range=3. Archery.  Max recovery rates in everything.
  686. Special Combat -4 against life only.  Fake wizard #5.
  687.  
  688. Hippocrates: 0 combat  -3 ranged combat against life only. Range=1.
  689. The legendary Greek healer.  Special Combat -2 against life only.
  690. Fake wizard #4.
  691.  
  692. Necromancer: #3 (casts Kill and Raise Dead 33% of the time.)
  693.  
  694. Chronomancer: #2 (casts Vanish 20% of the time.)
  695.  
  696. 3 new special creature types:
  697. .Memory (remembers what is under a cell. Elephant, Memory Master, Memory Mage)
  698. .RecognizeCreatures (allows you to see the stats of scroll creatures +
  699.          recognizes the creatures in your bonus spells list.
  700.          OmniBiologist and Recognomancer)
  701. .Oracle (equivalent to having a CrystalBall. Oracle)
  702.  
  703. * Need the above 3 in the wizardinfo struct also. DONE.
  704.  
  705. * BUG in sm.c: It won't process my creatures with negative combat or
  706.   negative ranged combat. NOW FIXED.
  707.  
  708. * Special Programming for Oracle done.
  709.  
  710. * ELEPHANT now has perfect Eidetic Memory.
  711.  
  712. * INFO PANELS modified to show you what is under the cell if you have the
  713.   memory powerup.
  714.  
  715. We might want to make a graphic that means "You currently possess the
  716. perfect Eidetic Memory Powerup" to be displayed as a wizard powerup in
  717. ExtraDisplay();  If anyone wants to draw or render or rip such a graphic
  718. then please do so.
  719.  
  720. Should there be an "Eidetic Memory" spell?  It seems too weak.  Its better
  721. to cast a creature that has Eidetic Memory built-in.
  722.  
  723.  
  724. Need to add code so that if you have the .Recognize powerup, pressing the
  725. LMB on the 2nd info panel of a scroll brings up an info panel of stats
  726. showing the InitialData[id] stats. So how do I do this?
  727.  
  728. I can't simply make a pointer to a fakecell and call the InformationPanel()
  729. with this pointer because InformationPanel() has code which requires a
  730. numeric cell number.  Actually there are only 2 lines of code which require
  731. a real cell number and they are related to exploration.  (A long time ago I
  732. had to take the exploration info out of the cell structure because it saved
  733. me a LOT of problems rewriting code... however the price is that it is now
  734. causing me THIS problem)  Luckily this is easily worked around.
  735.  
  736. Options:
  737. A: allocate memory for an extra cell in board[] and use that as a fakecell.
  738.    Then the cell will have a real number.  This would be very easy to do but
  739.    would wreak havoc with the array bounds checking. DO NOT DO THIS.
  740.  
  741. B: Change the InformationPanel() cell parameter so that -1 means "This cell is
  742.    a fake cell" and then add in 2 if-thens to not use any code that
  743.    requires a real cell #. (only the exploration-related code requires a
  744.    real cell number due to exploration bits not being contained in the
  745.    playCell structure.)  DONE.
  746.  
  747. * Now I can simply make a pointer to a fake cell struct and call
  748.   InformationPanel() on that fake cell struct! Easy.
  749.  
  750. * If the wizard possesses the .Recognize powerup then pressing the LMB on the
  751.   2nd info panel of a scroll brings up an info panel of stats showing the
  752.   InitialData[id] stats.  DONE.
  753.  
  754. * New Routine: RecalculatePowerups();
  755.  
  756. Casting the memory master gives you the Memory powerup.
  757. Death of memory master makes you lose the powerup.
  758.  
  759. Ditto for RecognizeCreatures powerup and Oracle powerup.
  760.  
  761.  
  762. A death or warp requires a total recalculation.
  763. A birth/insert doesn't really need a total
  764. recalculation it just needs a simple test on the 1 creature.
  765. For simplicity I will do a total recalculation in every instance since
  766. deaths/warps/births/inserts don't happen very often so cpu speed is not
  767. essential.  Also doing the total recalculation each time will help to
  768. "cover up" future bugs whereby some new spell does something wacky and
  769. forgets to call RecalculatePowerups();
  770.  
  771. Do creatures which are in the underpart of a cell provide powerups?
  772. I am going to say YES because:
  773. #1: Its easier to code it that way.
  774. #2: It sort of makes sense that an Oracle underneath a growth would still be
  775.     able to see things with his crystal ball. (ok not really... but..)
  776.     It sort of makes sense that a Recognomancer under a growth would still
  777.     be able to recognize things by the wizard sending him a mental image of the
  778.     thing to be recognized.
  779.     It sort of makes sense that a Memory Master would still remember
  780.     everything while he is under a growth.
  781. #3: Nothing needs to be recalculated just because something went from the
  782.     underpart to the visible part of a cell (or vice versa).
  783.  
  784. * Added in code to call RecalculatePowerups() in all appropriate core.c
  785.   functions EXCEPT BackUpCellWizard() and RestoreCellWizard() because I'm
  786.   not sure how those do/should work.
  787.  
  788. Unfortunately RecalculatePowerups may get called 2 or 3 times in certain
  789. routines like Reinstate.
  790.  
  791. * Added in code to call RecalculatePowerups() in warp.c.
  792.  
  793. That SHOULD cover all the places that need RecalculatePowerups() added.
  794. However if there is any place in the code that removes some thing from the
  795. board or puts something on the board without using 1 of the above routines
  796. then there will be a slight bug.  Should such a thing happen it will be
  797. neccessary to modify the offending code with a call to
  798. RecalculatePowerups() or modify it to use one of the above routines.
  799.  
  800. * BUG: EditorPaste just puts stuff into a cell without using
  801.   InsertCreature() and it doesn't ever call RecalculatePowerups(); so
  802.   inserting Oracles, Memory Masters, Omnibiologists etc. doesn't give your
  803.   wizard the appropriate powerup.  NOW FIXED.
  804.  
  805. * BUG: RecalculatePowerupsFlag was a BYTE instead of a LONG so it was
  806.   completely and utterly broken.  NOW FIXED.
  807.  
  808. * 3 NEW STATS:
  809. .RecognizeGrowths (MullacDeIrvine)
  810. .RecognizeInanimates (Inanimatologist, Inanimage)
  811. .RecognizeSpells (Recognomancer)
  812.  
  813. Recognomancer has all above stats set to true.
  814.  
  815. * 3 NEW CREATURES:
  816.   Mullac De Irvine: like a undead fake wizard but can recognize growths. (Wizard graphic #1)
  817.   4 kills promotes to Recognomancer.
  818.   Inanimatologist:  Can recognize Inanimates (walls, trees, etc.) Needs a graphic.
  819.   3 kills promotes to Inanimage.
  820.   Inanimage is like an Inanimatolgist with the stats of an Ogre Mage.  He
  821.   heals the friendly inanimates around him. (Same graphic as
  822.   Inanimatologist)
  823.  
  824. * HORRIBLE BUG in sm.c: I have a line in the Recognomancer.spl file:
  825. Stat:        STANDARD_CREATURE | STATIC_STAT | RECOGNIZECREATURES_STAT | RECOGNIZEGROWTHS_STAT | RECOGNIZEINANIMATES_STAT | RECOGNIZESPELLS_STAT
  826.  
  827.   It absolutely refuses to process this line.  It gives bogus errors and
  828.   screws up the compilation.  It says "Unexpected white space in tag Stat"
  829.   "Ignoring rest of line in attempt to recover."
  830.   Ok, the problem was that the LINE_LENGTH in sm.c was set to 128 and after
  831.   the 128th char it tried to process the rest of the line as a "Stat:" tag
  832.   (?) Anyway I changed LINE_LENGTH to 256 so its ALL FIXED NOW.
  833.  
  834.  
  835. * Bonus Spell Selection now prints the name of the spell you are pointing
  836.   at (if you have the appropriate .recognize powerup) at the bottom of the
  837.   screen.
  838.  
  839. Should I allow "q" to work on the bonus spell screen? 
  840. Or should it just tell you the name of the thing you are pointing at?
  841.  
  842. * 2 new bits: .RecognizeProgramming and .Ibrowse (mind reading).
  843.  
  844. * 2 NEW INANIMATE OBJECTS:
  845.   Burstroem's Browser: Allows you to browse through other people's spell lists.
  846.   Optometron of Omniscience: sets all .recognize bits + .RecognizeProgramming
  847.   + .Memory + .Ibrowse
  848.  
  849. I couldn't decide how to implement the encryption of the programming files
  850. so I haven't implemented the .RecognizeProgramming feature yet.
  851. I guess vampire.c just needs to be rewritten as FastVampire.c to load an
  852. entire file in and encrypt it and write it back out.  The current version
  853. of vampire.c is entirely toooo slow and greatly reduces compilation speed.
  854. Just copy coding techniques from jcformat.c into vampire.c.
  855.  
  856.  
  857. Copy everything into sc:chaos_2.81 before I attempt this stuff!
  858. I might screw everything up!
  859.  
  860. Special programming for the .Ibrowse bit:
  861.   Just make a simple modification to
  862. 1: RedrawRightHandSide(): NONE NEEDED
  863. 2: Simple modification to the BoardUpdate();  DONE
  864. 3: Simple modification to GetSpells(); Just had to move the .necro and
  865.    and .forgot random clearing code to BoardUpdate();  DONE.
  866. 4: DisplaySpellList(); NONE NEEDED
  867. 5: Some complicated mods to HandleIDCMP();  DONE.
  868. _________________________________________________________________________
  869.  
  870. When I compile I am getting an error in line 2681 of chaos.c
  871. "Error 218: declaration found in statement block"
  872. This is useless.  And I have no idea where the problem is or how to fix it.
  873.  
  874. When I JCformat chaos.c it tells me:
  875. "Error in line 2416: Ending does not match beginning."
  876.  
  877. This is yet another example of a C compiler giving a useless error on a
  878. line when the REAL error is hundreds of lines of code away.
  879.  
  880. * Problem fixed in 2 minutes thanks to JCformat.
  881. __________________________________________________________________________
  882.  
  883. March 5th, 2000.
  884. * If you have Burstroem's Browser or the Optometron of Omniscience you can
  885.   now press ctrl-# to browse through other player's spell-lists!  Its very
  886.   cool!  Pressing the "end turn" / "return" gadget exits the
  887.   browsing/peeking/mind reading back to your normal spell-selection. DONE.
  888.  
  889.  
  890. ==========================================================================
  891.  
  892. * BUG: An Independent Aesculapius keeps shooting my creatures and healing
  893.   them.  NOW FIXED.
  894.  
  895. * BUG: All enemy creatures with negative combat (Hippocrates and Aesculapius)
  896.   keep healing their enemies and NOT healing their friends.  NOW FIXED.
  897.  
  898. * BUG: A human player cannot attack his own stuff with his healing
  899.   creatures.  NOW FIXED.
  900.  
  901. * NEW FEATURE: You can now attack your own creatures if such an attack would
  902.   heal the creature.
  903.  
  904. * BUG: Healing attacks make no sound and no graphical effect.  NOW FIXED.
  905.  
  906.  
  907. * New bit: EXOPHAGY_STAT
  908. * New stat BYTE char_stat.Scavenge   (allow for negative numbers)
  909.  
  910. * 4 NEW SPELLS: Eidetic Xenogenocide, Mnemicide, Scavengerism, Exophagy.
  911.  
  912. * IMPROVED AI: I made a new FLAG_HIGHCOMBAT bit to help out the AI of the
  913.   DemonicTouch and Exophagy spells.
  914.  
  915. * Eidetic Xenogenocide has its own special AI routine to decide when to
  916.   cast it.
  917.  
  918. * Scavengerism provides +8 Scavenging to any scavenger or +4 scavenging to
  919.   any nonscavenger.  A scavenger eats corpses.  Bon Apetit!
  920.  
  921.   Scavenger/Nonscavenger is determined by the InitialData[id].
  922.   (isIDscavenger(id)).  Should be as common as Recover Boost.
  923.  
  924.  
  925. * Exophagy is the act of eating your enemies alive.  Yummy.  Half of the
  926.   damage you inflict in hand-to-hand combat will be added to your life force.
  927.   Should be as common as Recover Boost.
  928.  
  929.  
  930. * BUGS: Sleeping Ropers teleport, Sleeping Haunts change sides, Sleeping
  931.   Volcanos explode, Sleeping Spriggans fall asleep and Sleeping Meditations
  932.   Collapse.  NOW FIXED. 
  933.  
  934. * IMPLEMENTED special code into BoardUpdate() for handling scavenging on
  935.   March 8th, 2000.
  936.  
  937.   HandleScavengerism drains your ScavengerValue*2 from the dead creature
  938.     beneath you and gives you ScavengerValue of points to your life.
  939.   You can't drain more life than the corpse has.
  940.   When you drain a corpse down to negative of its normal maximum it is
  941.     devoured and disappears.
  942.   You can't gain more life than your normal maximum.
  943.   Scavenging always happens AFTER regular healing with recovery rates.
  944.  
  945. I have not tested negative scavenger values.  They might freak out.  Who
  946. knows?
  947.  
  948. * NEW SCAVENGER ABILITY:
  949.   Vulture +2, Giant Rat +4, Neo Otyugh +4, Tyrannasaurus Rex +5,
  950.   Dire Wolf +2,  Arctic Wolf +2, Orc +1, Mighty Orc +2.
  951.  
  952. I might try to make Exorcist -1 later.
  953.  
  954. * ADDED Scavenger to the 1st info screen.  It is only shown for those
  955.   creatures that actually have a Scavenger value.
  956.  
  957. * BUG: Speech for Neo-Otyugh and Inanimatologist doesn't work!  NOW FIXED.
  958.  
  959. * ADDED Exophagy to the 2nd info screen + the level editor.
  960.  
  961. * ADDED Exophagy to the combat system.
  962.  
  963. * Currently exophagy only applies to LifeCombat.  So damaging an opponent's
  964.   intelligence doesn't gain you any intelligence.  Perhaps this should be
  965.   changed?  This exophagy concept needs to be playtested.
  966.  
  967.  
  968. Enhanced scavenging mode:
  969. 1: If there is no scavenging going on this turn then don't play the music.
  970. 2: Play the scavenging music. modified ChaosTheme42
  971. 3: Count up how many creatures will scavenge this turn.  Divide this number
  972.    into 7 seconds (350 frames).  This is how much time each creature will be
  973.    highlighted.
  974.    Highlight time not to go lower than 50 frames.  So 7 seconds is long
  975.    enough for 7 scavengers.  The mod can just be position 16 and 17
  976.    "eatem up yum yum"  then 6,7,8 then looping.  35 seconds of music is way
  977.    longer than I'll ever need. That's enough for 35 scavengers.  It will take
  978.    at least 21 scavengers to get to the cool part of the mod.
  979.    I'll try to work out some way so that the Scavenging Phase can flow into
  980.    the Artifact changing phase
  981.  
  982.    So 7 scavengers or less plays Mod A. (1 pattern of eatem up yum yum then
  983.    the wild pattern happens at the same time as the screen for
  984.    "Artifacts Changing Wwners Phase".
  985.  
  986.    So 8-14 scavengers plays Mod B. (2 patterns of eatemup yum yum then the
  987.    wild pattern happens at the same time as the screen for "Artifacts
  988.    Changing Owners Phase.
  989.  
  990.    Possibly should put in some sort of "Dammit he stole my artifact!" or 
  991.    "He stole my artifact!" into the mod.
  992.  
  993.    Mod AA is for the short 1st part + the wild part with "He stole my artifact!"
  994.    Mod BB is for the double 1st part + the wild part with he stole my artifact!"
  995.  
  996. 4: Highlight the creature and do a WriteNearBottom: James's Neo-Otyugh eats
  997.    some Red Dragon Meat.  Life +4.   Wait 50 frames.  NEXT.
  998.  
  999. {flesh,meat,carcass,corpse,cadaver}
  1000. {eats,chows down on, munches on, nibbles on, drinks, sucks on, slurps down,
  1001. scarfs down, chews on, feasts on, ingests}
  1002.  
  1003. "%s's %s {eats} some %s {flesh}.  Life %+d"
  1004.  
  1005.  
  1006. HORRIBLE BUG: When I added 2 new lists into TalkLists I started having
  1007. enforcer hits and crashes.  I ran mungwall/sushi and got tons of mungwall
  1008. hits.  I think I fixed one longstanding mungwall problem but I haven't yet
  1009. been able to stop the current problems and crashes.  When I use the old
  1010. talklists file, everything works fine as before.  This is all very strange.
  1011.  
  1012. Several days later:  I narrowed the problem down to 1 of the 2 following
  1013. lines of code by simply inserting TerminateChaos(0) at various points in
  1014. the start.c startup code.
  1015.  
  1016. One of these 2 lines is totally trashing memory and corrupting things:
  1017. start.c/CommenceChaos()
  1018.   IF (!(ListNameArray=(char **)malloc((NumberOfLists+1)*8))) THEN
  1019.      TerminateChaos(CHMEMORY_ERR);
  1020.   END_IF
  1021.  
  1022. start.c/TerminateChaos()
  1023.   IF (ListNameArray)         free(ListNameArray);
  1024.  
  1025.  
  1026. So either malloc() or free() has horrible bugs (which seems highly
  1027. unlikely)  or there is some other bug somewhere that is trashing some of
  1028. the memory holding the code for the malloc() and/or free() functions (this
  1029. seems AMAZINGLY unlikely, since trashing some program code would normally
  1030. produce an ILLEGAL INSTRUCTION guru.)
  1031.  
  1032. I have replaced that particular malloc/free with AmigaOS AllocMem/FreeMem
  1033. and now the program SEEMS to be working perfectly with no enforcer hits and
  1034. no mungwall hits. HOWEVER, it is my opinion that there is still a bug
  1035. somewhere that is trashing memory because I just ran and quit chaos twice
  1036. and then typed "smake" in the shell and sc gurued with exception 80000004.
  1037.  
  1038. During the last few days of trying to kill this horrible bug I found some
  1039. other hideous bugs that I fixed.
  1040.  
  1041. * BUG: You cannot use the same struct NewScreen to open 2 different
  1042.   screens.  If you do there will be lots of hideous mungwall hits deep in the
  1043.   OS where X bytes of memory are allocated but only X-y bytes are freed.
  1044.   NOW FIXED.
  1045.  
  1046. I think the same thing might be true for struct NewWindow so I modified the
  1047. intro code to use 2 seperate NewWindow structs.
  1048.  
  1049. * MEMORY LEAK: Each time that CloseWindowSafely() is called results in a
  1050.   34-byte memory loss.  I have no idea why this is happening since
  1051.   CloseWindowSafely() doesn't allocate any memory!  I didn't write
  1052.   CloseWindowSafely(), I simply copied it from the Amiga Developer's CD
  1053.   Oh well...  I have replaced all calls to CloseWindowSafely() with old
  1054.   fashioned CloseWindow() and now there are NO memory leaks in Chaos!  YAY!!!
  1055.  
  1056. * BUGS: I still get a mungwall hit + bizarre crashes with zillions of other
  1057.   mungwall hits (sometimes from input.device or Iprefs or CygnusEd, etc.)
  1058.   each time I run chaos, set the options then immediately quit on turn 1
  1059.   without doing anything.  So I have now replaced 2 of those other mallocs
  1060.   and now everything seems to be working perfectly.  THIS IS VERY STRANGE
  1061.   because I replaced the malloc()s with AllocMem() but FORGOT to replace the
  1062.   free()s with FreeMem()!
  1063.  
  1064. 1. reset puter
  1065. 2. run muforce stdio
  1066. 3. run muguardianangel nametag nostackwarn
  1067. 4. run sushi asksave
  1068. 5. run cpr chaos
  1069.  
  1070. OR 
  1071. 1. reset puter
  1072. 2. run c:enforcer/enforcer stdio
  1073. 3. run mungwall task chaos nametag 
  1074. 4. run sushi asksave
  1075. 5. run cpr chaos
  1076.  
  1077.  
  1078. MuLink.lha         dev/misc    94K   4+Memory protect selected hunks of binaries
  1079. Mem2_2.lha         util/moni   39K  77+Memory viewer, editor and browser
  1080. memtest.lha        util/misc   12K 357+Memory Tester
  1081.  
  1082.  
  1083.  
  1084.  
  1085. * BUG FINALLY SOLVED: Ok, the REAL problem was in the TalkList file
  1086.   handling.  There were various FOR-NEXT loops that went while
  1087.   p<=TalkListBufferEnd when they REALLY should have said p<TalkListBufferEnd
  1088.  
  1089.   Also, I was only doing AllocMem(NumberOfLines * sizeof(char *)) instead
  1090.   of the C-proper AllocMem(NumberOfLines+1) * sizeof(char *))
  1091.  
  1092.   BOTH OF THESE BUGS NEVER WOULD HAVE HAPPENED IF C HAD ARRAY-BOUNDS
  1093.   CHECKING!  It took me 18 hours to track down and fix these bugs.
  1094.  
  1095.   ALL IS NOW FIXED! (March 19, 2000)
  1096.  
  1097. * All appearances of malloc() and free() not working were just terrible
  1098.   side-effects of writing 2 elements beyond the allocated memory!
  1099.  
  1100. * Make a modified "Eatemup yum yum mod" to play during the scavenging and
  1101.   artifacts-changing-owners part of the board update. DONE.
  1102.  
  1103. I am taking Blocks from Song 0 and using them in the other songs
  1104.  
  1105. Block 22 becomes block 0
  1106. Block 04 becomes block 1
  1107. Block 05 becomes block 2
  1108.  
  1109.  
  1110. Song 1: 22, END (SHORT Scavenge music 7 seconds)
  1111. Song 2: 22,22, END (LONG Scavenge music 14 seconds)
  1112. Song 3: 22, 4,5 Loop back to 4 (SHORT Scavenge + Artifact music)
  1113. Song 4: 22,22, 4,5 Loop back to 4 (LONG Scavenge + Artifact music)
  1114. Song 5: 4,5 END (Artifact Changing Music ONLY)
  1115. Do enhanced "Artifacts Changing Owners Mode"
  1116. I guess I should divide 14 seconds by the number of artifacts that will
  1117. change.  But it should be at least 1 second per.  And no higher than 7
  1118. seconds per.
  1119.  
  1120.  
  1121. * BUG: startmod ONLY plays song 0 regardless of the supplied song paramter.
  1122.   MUST reassemble the music replaying code with debug info so I can trace
  1123.   through and debug this crap!  But I'm in a hurry so I have worked around
  1124.   it for now by simply doing:
  1125.   loadmod("filename");
  1126.   playmod(songnumber);
  1127.   This works.  But sometimes it doesn't work the very FIRST time you do it.
  1128.   So there are yet more bugs in the music playback system 8(
  1129.   However:
  1130.   loadmod("filename");
  1131.   playmod(songnumber);
  1132.   playmod(songnumber);  seems to make everything work ok.  Just double up the playmod() command.
  1133.  
  1134.  
  1135. * Make a new StartMod() function that works around the bugs by doing:
  1136.   loadmod()
  1137.   playmod()
  1138.   Delay(1);
  1139.   playmod()
  1140.  
  1141.   Then replace all occurrences of startmod and loadmod/playmod with this new
  1142.   routine!  DONE.
  1143.  
  1144.   StartMod(0) doesn't work correctly on song 0 for some unknown reason.  So
  1145.   I am still using startmod(0) for playing song 0.
  1146.  
  1147. * I had all those startmod() problems and implemented all the fixes back
  1148.   when I was writing beyond the bounds of my allocated memory in the TalkList
  1149.   file handling.  So perhaps that was real cause of the problems?
  1150.   Weeks Later: No, the subsongs till usually freak out the very FIRST
  1151.   time they are played.
  1152.  
  1153.  
  1154. March 21st, 2000:
  1155. * Sound sample playing cli command implemented.
  1156. * New End of Turn sound implemented. (I really hated the old one.)
  1157. * New healing sound for combat that heals.
  1158.  
  1159. * BUG: Sound sample cli command always crashes when played from within
  1160.   Chaos and when typed as an actual command in a shell window while chaos is
  1161.   running, it doesn't crash but it just never quits either (until you send it
  1162.   a ctrl-c)  NOW FIXED.
  1163.  
  1164. * BUG: When a creature attacks your SpecialCombat stat, your SpecialCombat
  1165.   stat always becomes -15.  NOW FIXED.
  1166.  
  1167. * PROBLEM: There is a delay when playing sound effects with the cli
  1168.   command.  This is due to 3 things:
  1169.   1. The command must be loaded from the hard drive.  This delay could be
  1170.      reduced by putting the command into the ram: disk. DONE.
  1171.      (It could be eliminated by making the command resident (requires
  1172.      recoding))
  1173.  
  1174.   2. The memory for the buffers must be reallocated each time it is run.
  1175.  
  1176.   3. The sound file must be loaded from disk each time.  I could eliminate
  1177.      this by loading frequently used sounds into memory... or the Ram: disk.
  1178.  
  1179.   4. The animation system is running in 64 colors and its slowing other tasks
  1180.      down.
  1181.  
  1182.  
  1183. * PROBLEM: Aesculapius's shooting attacks increase the target's
  1184.   SpecialCombat.  So I've got several creatures now with SpecialCombat but
  1185.   their SpecialCombatApply and SpecialCombat Except bits are not set so their
  1186.   Special Combat is attacking EVERYBODY (enemies, friends, scrolls,
  1187.   everything).  But since SpecialCombatApply is not set, no actual damage is
  1188.   done.
  1189.  
  1190.   I have 2 options for fixing this:
  1191.   A: Set every creature to have a default SpecialCombatApply of life and
  1192.      SpecialCombatExcept of FRIENDLY.
  1193.   B: Change Aesculapius to not attack SpecialCombat.  This option is the
  1194.      easiest and since Aesculapius is incredibly powerful already I'm going to
  1195.      do this option.  DONE.
  1196.  
  1197. * BUG: Sound sample player cli command ALWAYS freaks out when running 2 of
  1198.   them at the same time. (but only when using the -2 option)
  1199.   NOW FIXED by allocating the sound channels at maximum priority.
  1200.  
  1201.  
  1202. * BUG: sometimes the sound sample player cli command never exits.
  1203.   This might have something to do with either:
  1204.   A: It tries to output an error message and hangs for some reason?
  1205.   B: It hangs when it can allocate the first audio channel but not the 2nd
  1206.      one.
  1207.   C: It hangs due to strangeness in the Audio.device code.
  1208.   D: It hangs due to music system "stealing" the sound channels while it is
  1209.      still playing.  This SHOULD be impossible but it appears to be exactly
  1210.      what is happening.
  1211.  
  1212.   Possible solutions:
  1213.   A: Each time I run JCSound I will soon afterward do a WaitJCSound();  Thus I
  1214.      will never try to run 2 of them at once.
  1215.   B: Modify JCSound to output a message when it is finished to a pipe:file
  1216.      that Chaos will check.
  1217.   C: Modify JCSound to send Chaos a ctrl-d when its finished so I can Wait on
  1218.      it.
  1219.   D: Assume scenario D: above is true and simply make the Music system Wait
  1220.      for JCSound to finish before starting.  DONE.  SEEMS TO WORK PERFECTLY.
  1221.  
  1222.  
  1223. --------------------------------------------------------------------------
  1224. ----------------------  WaitJCSound routine -------------------------------
  1225.  
  1226. * WaitJCSound() routine. DONE.  Uhmmm... It doesn't work.. FindTask() NEVER
  1227.   finds my tasks by name! 8(
  1228.  
  1229. OPTIONS:
  1230.   1. Use SASC Fork() and Wait().
  1231.      Advantages: Easy to wait for it to complete.  Don't have to muck
  1232.                  around with messageports and things.
  1233.      Disadvantages: Fork REQUIRES that the code be a program stored on disk,
  1234.                     thus there is a slight delay while the code is loaded.
  1235.  
  1236.   2. Use AmigaOS CreateNewProc.
  1237.      Advantages: Can directly call code in the main program as a
  1238.                  subtask/subprocess.
  1239.      Disadvantages: I'd have to rewrite JCSound to be internal to the main program.
  1240.                     I'd have to create some ExitCode to send the main
  1241.                     program a message when JCSound is finished.  This
  1242.                     requires making a secret messageport to check.
  1243.  
  1244.   3. I could just rewrite JCSound to take an extra MessagePort parameter and
  1245.      then JCSound would simply send a message to that port when it is finished.
  1246.   3A. Or I could rewrite JCSound to do a FindPort() for ChaosJCSoundPort
  1247.       and send a message to it when finished.
  1248.  
  1249.   4. I could rewrite JCSound to be internal to the main program AND it will
  1250.      simply run continuously and send the main program a message when it is
  1251.      finished.  This way it doesn't have to keep reallocating its buffers and
  1252.      stack and everything!!!!!
  1253.  
  1254.      Advantages: Only have to CreateNewProc on it ONE TIME.
  1255.                  It would always be loaded into memory and would be
  1256.                  instantaneously fast at getting started.  No more waiting
  1257.                  while it allocates all its memory and stuff.
  1258.  
  1259.     Disadvantages: It must CreatePort() a message port to receive various
  1260.                    messages such as:  START, STOP, UNLOAD.
  1261.                    Or perhaps it could just respond to ctrl-c etc.
  1262.  
  1263. OK, the problem is that when you run a program in a cli the taskname is set
  1264. to "CLI 6" or somesuch.  I tried putting in a
  1265. SetProgramName("ChaosDigitalSoundSubProcess") into JCSound but it still
  1266. didn't put that name into the tasklist, just in some other "command list".
  1267.  
  1268. So now I have simply changed FindTask() into FindPort() to see if the
  1269. subprocess is still running.  Finding a port by name seems to work
  1270. perfectly.  NOW FIXED.
  1271. ---------------------------------------------------------------------------
  1272.  
  1273. There will be a completely seperate cli command called ChaosBackgroundMusic
  1274. which will only be run if streaming background music is activated.  It will
  1275. run in looping mode until it recieves a ctrl-c.
  1276.  
  1277. I've decided not to use the PlayADPCM command due to the fact that hard
  1278. drive storage is sooo cheap these days.  Hard drive space is not a problem
  1279. anymore.
  1280.  
  1281. * JCSound is currently 18640 bytes in size.  I am now recompiling it with
  1282.   optimize.  Now its  17948 bytes in size.  SAVED 692 bytes.
  1283.  
  1284. * ADDED in some code so that combat sounds can be added by the end user by
  1285.   simply putting an 8svx sound file into the dir Sounds/Combat/Monster Name
  1286.   where "Monster Name" is the exact name of the monster that will play this
  1287.   sound effect when attacking.  The name must be exact.  It is
  1288.   case-sensitive.  Spaces must be correct also.  Do NOT place an extension
  1289.   such as .8svx onto the filename.
  1290.  
  1291.   Now when someone is playing the game and they say "Hey!  I have a GREAT
  1292.   sound effect for this monster!  I wish I had some way of adding it to the
  1293.   game.", they can really do it!
  1294.  
  1295.  
  1296.  
  1297. ------------------------------------------------------------------------
  1298. STRANGE BUG: I just did a "smake clean" then "smake" and no errors are
  1299. reported but when it gets to the linking phase slink complains that
  1300. _GeneralImages has not been defined anywhere.  I searched through the
  1301. entire program code and, sure enough, GeneralImages is not defined
  1302. anywhere.
  1303.  
  1304. GeneralImages is supposed to be defined in creature.d.
  1305. Creature.d is created by makedata which comes from makedata.c which comes
  1306. from graph.tex.
  1307. makedata makes creature.d by processing makedata.txt.
  1308. What makes makedata.txt?
  1309. The spellmanager script makes makedata.txt by joining a bunch of files
  1310. together!
  1311. JOIN ram:image1.tmp ram:image2.tmp ram:image3.tmp ram:imaged.tmp makedata.tmp AS makedata.txt
  1312.  
  1313. Above line is unchanged in all my old version of chaos
  1314. so makedata.tmp must not be getting made correctly!!!
  1315. Uhmmm... makedata.tmp DOES NOT EXIST.  It is NEVER created or modified by
  1316. anything anywhere!
  1317.  
  1318. However in the makefile there is this curious construction:
  1319. creature.o: makedata initial_data.c
  1320.     makedata
  1321.     copy ram:images.tmp creature.d
  1322.     type ram:il.tmp >>creature.d
  1323.     delete ram:images.tmp
  1324.     delete ram:il.tmp
  1325.     sc $(STDOPS) nodebug optimize  memorysize=huge creature
  1326.  
  1327. makedata is used to creature creature.d and then the type command is used
  1328. to join "il.tmp" onto the end of creature.d.  So I guess il.tmp is not
  1329. being created properly.
  1330.  
  1331. But makedata.c is simply processing whatever is in makedata.txt!!!!
  1332.  
  1333. I cannot figure this out!
  1334.  
  1335. Ok I sort of figured out what was actually missing from the program and
  1336. hand edited everything to work.  This took a couple of hours and made me
  1337. late for work.  I imagine this is all going to happen again the next time I
  1338. add new spells to the game and must completely recompile everything.
  1339. I fixed this months later once I discovered that a *.tmp file was missing
  1340. in the directory.
  1341. ------------------------------------------------------------------------
  1342.  
  1343. * BUG: When playing Texas Trash'em Select a spell, then examine a spell.
  1344.   When you are finished examining your spell only the part of your spell list
  1345.   up to the point of the spell that you are casting gets redrawn.  The others
  1346.   are not redrawn.  This is a problem in DisplaySpellList().  NOW FIXED.
  1347.  
  1348.  
  1349. =========================================================================
  1350.  
  1351. * Modify the combat routine to play the combat sound if present for
  1352.   this monster.  DONE.
  1353.  
  1354. What the hell do I do now?  Do I make a NEW ROUTINE called:
  1355. CellEffectWithDigitalSound()
  1356. Disadvantages: It would HAVE to duplicate all the gfx code of CellEffect()
  1357. therefore it seems stupid.
  1358. Advantages: Don't hafta go through and add ,NULL to all function calls.
  1359.  
  1360. Or do I just add a new parameter to CellEffect()
  1361. Disadvantages: Hafta add ,NULL to all existing CellEffect() calls.
  1362. Advantages: Allows me to mix and match any gfx effect with any sound
  1363. effect.
  1364.  
  1365. I am going to send in a char * parameter which points to a string which
  1366. contains the filename.  Here is the BIG problem!
  1367.  
  1368. I don't want to have to constantly do
  1369. sprintf(text_store,"Combat/%s",creature_name[x]);
  1370.  
  1371. I could JUST pass in ,creature_name[x])  THEN IF it is a ATTACK sound then
  1372. CellEffect will assume the Sounds/Combat/ part of the filename and do the
  1373. sprintf itself.
  1374.  
  1375. * Changed Jillions of CellEffect() calls to also pass a ,NULL parameter.
  1376.   Hopefully within a year most of these NULLs will be replaced with real
  1377.   digital sound effects.
  1378.  
  1379. =========================================================================
  1380.  
  1381.  
  1382. 0. Assign a couple of sound effects to test out the system!
  1383.    Ok it works BUT OMSS 1.03c and DSS8 and SFX3.50 all refuse to save the
  1384.    playback speed information into the sound sample!  So the speeds are all
  1385.    wrong!
  1386.  
  1387.    OPTIONS:
  1388.    A: DL that little ratechanger cli proggy from aminet.
  1389.       samrate15.lha      mus/edit    12K 128+Changes pitch of 8SVX samples
  1390.       No, this is a pitchshifter which is very nice but not what I want.
  1391.  
  1392.    B: Switch to a new sample editor program from aminet or from my
  1393.       collection.  There are about 2 dozen different ones!  I have no idea
  1394.       which ones to try!  I guess I'll try the 10 year old AudioMaster 4.
  1395.  
  1396.    I FINALLY FIGURED IT OUT.  In OMSS you must hold the mouse button down
  1397.    and simultaneously press a note key to register your note.  THEN from
  1398.    within the Sample Editor Window you must select
  1399.    Tools/Copy Pitch/Sample Editor -> Inst. Default
  1400.  
  1401. * BUG: If you have a creature that has Ranged Combat and he is attacked
  1402.   by a Range Drain Beam spell such that his Ranged Combat is reduced to 0
  1403.   then a subsequent Range Boost spell will NOT work on him!  Simply put:
  1404.   the bug is that Range Boost does not work on creatures with 0 Ranged
  1405.   Combat EVEN THOUGH they had some "initial ability".  NOW FIXED.
  1406.  
  1407. * INSTALLED over 50 new digital sound effects into the game.
  1408. * The Eagle has a real Eagle sound when attacking.
  1409. * The Vulture has a real Vulture sound when attacking.
  1410. * The Crocodile and ShapeChanger have a real Alligator sound when
  1411.   attacking.
  1412. * Magic Glass now makes a breaking glass sound when it is killed.
  1413. * Dire Wolf yelps when it dies.
  1414. * Arctic Wolf whimpers when it dies.
  1415. * All Dragons make hideous screams when they die.  They are now 4x as much
  1416.   fun to kill!
  1417. * When you kill a generator the crowd goes "Aaaaaaaahhhh" in amazement.
  1418. * Jaguar and Leopard go "rrreeeeeooooowwwwwrrrr" when they die.
  1419. * Stone Giant says "I kill you!" when he kills someone.
  1420. * All Ogres say "Attack!" when they attack something.
  1421. * All dragons, cats, Hydras, Bears and Tyrannasaurus roar when they attack.
  1422. * Neo-Otyugh makes an eating sound when he attacks.
  1423. * All Wolves howl when they attack.
  1424. * Robot makes a mechanical sound when it attacks.
  1425. * All Horse-like creatures make real Horse-like sounds when they attack.
  1426. * Gorilla makes a real Gorilla sound when attacking.
  1427. * Fire Demons and Devils laugh evilly when attacking.
  1428. * Ghost goes "wooOOooOOooOOoo" when attacking.
  1429. * Camel makes a real Camel sound when attacking.
  1430. * Water Elemental makes a water sound when attacking.
  1431. * Fire Elemental makes a burning fire sound when attacking.
  1432. * Air Elemental makes a wind-blowing sound when attacking.
  1433. * Earth Elemental makes a rocks falling sound when attacking.
  1434. * King Cobra makes a rattlesnake rattling sound when attacking.
  1435. * Stone Giant goes "OOOORAAH!" when attacking.
  1436. * Wolverine growls when attacking
  1437. * Bodak and Bird-Lord make sounds when attacking.
  1438.  
  1439. I need to have some sort of generic attacking and dying sound for all those
  1440. wimpy bipedal creatures.  Any ideas?
  1441.  
  1442. * INSTALLED 3 new chaos theme songs on March 29th, 2000.
  1443.  
  1444. * CHANGED scavenging to drain as many points as are gained.  (It used to be
  1445.   2x as many.)
  1446.  
  1447.  
  1448. ====================== JJ Bug Report: ==============================
  1449.  
  1450. * BUG: Turmoil caused wizards to be riding independent generators, fauns,
  1451.   etc.  This was caused because TurmoilHandler() ONLY checked if the source
  1452.   cell had a mounted wizard and moved the wizard correctly.  It wasn't
  1453.   checking if the destination cell had a wizard.  NOW FIXED.
  1454.  
  1455. * STUPID: Wizard cast Restoration on his cloaked, combat, magic shielded
  1456.   wizard.  I changed it so wizards no longer cast restoration on their
  1457.   cloaked creatures.  NOW FIXED.
  1458.  
  1459. * BUG: Wizard is engaged to a creature.  Wizard attacks magic wood tree and
  1460.   kills it thus immediately moving into the space and disappearing into lala
  1461.   land.  Ok, I have now made it so that if a wizard is engaged he cannot
  1462.   attack, mount or move onto any meditation.  It will simply say 
  1463.   "You cannot enter a meditation while engaged".  NOW FIXED.
  1464.  
  1465. * BUG: Necropotence usually causes the game to lock up.
  1466.   I played a game and cast Necropotence on a computer wizard and he cast
  1467.   Necropotence on me several times but nothing bad ever happened.
  1468.  
  1469.   Ok I'm trying it again this time I've set it up so that the computer guy
  1470.   doesn't have ANY creatures, thus if I Necropotence him he'll have NO spell
  1471.   to cast.  It locked up in an infinite loop.  NOW FIXED.
  1472.  
  1473. =====================================================================
  1474.  
  1475. * REDUCED THE VOLUME of the algorythmic sound effects so they don't
  1476.   overpower the digital ones.  Technically they have always been too loud.
  1477.   A perfect sine wave going from +127 to -128 is really too much.
  1478.   I've reduced it to +90 to -90.
  1479.  
  1480. * CHANGED Vampire to have -4 recovery + exophagy so that when he attacks he
  1481.   recovers 1 point.  If he does not constantly feed on creatures he will
  1482.   soon die.
  1483.  
  1484. * SWAPPED the ranged combat stats of Shadow Dragon <-> Pseudodragon so they
  1485.   would make more sense.
  1486.  
  1487. * PROBLEM: You can get an Iridium horse in every single game because a
  1488.   typical game includes 2 or more aviaries, thus Bird Lords are abundant and
  1489.   its only a matter of time till you get an Iridium Horse.  This whole
  1490.   thing is actually a bug.  Iridium Horses are SUPPOSED to only be made
  1491.   when killing a DRAGON (or a Tyrannasaurus Rex).  NOW FIXED.
  1492.  
  1493. * Now using the "Hallelujah" choir sample for the bonus spell noise.
  1494.  
  1495. * ADDED IN THE CODE TO PROCESS Sounds/Kill/ and Sounds/Death  DONE.
  1496.   Now anyone can make a sound effect for when a creature kills something or
  1497.   for when a creature dies just by putting the sound in the appropriate
  1498.   directory and naming the file with the name of the creature.
  1499.  
  1500. * I went back and listened to every sound effect and several of them were
  1501.   not very loud so I edited them and increased their volume to 188%.  I kept
  1502.   the original sounds in sc:OriginalUnmodifiedSounds/.
  1503.  
  1504. * BUG: Sometimes the digital sounds fail to play because they can't
  1505.   get one of the audio channels.  I believe this is because AlgoFreeChannel
  1506.   was not doing a ADCMD_FREE before it closed the audio device.
  1507.   Also sometimes the speech flips out and sounds on 2 channels at once.
  1508.   ALLEGEDLY NOW FIXED.  (hopefully this fixes the subsong problems too)
  1509.  
  1510.   uhh... hmm...  The only thing that has changed is that the algorythmic
  1511.   sound effects now proceed MUCH faster than before....  They appear to be
  1512.   at least 4x faster.  Probably because it is freeing the channel before
  1513.   the sound is complete.
  1514.  
  1515.   I still get all the same weird audio bugs as before. :(
  1516.  
  1517. 1. Play a test game with the speech OFF to see if that makes any difference.
  1518.    It didn't make any difference that I could tell.  Sometimes JCSound
  1519.    couldn't allocate its channel just like always. :(
  1520.  
  1521. 2. Play a test game with speech OFF and sound OFF.  Still got the same
  1522.    weird random bugs, possibly due to the fact that sound OFF only turns off
  1523.    certain sounds while others still make noise.
  1524. 2. Investigate FreeAlgoChannel()
  1525. 3. Investigate reusing same struct IOaudio thing. 
  1526.  
  1527. So either Speech routine is messed up or Algo sounds routine is messed up
  1528. or both!
  1529.  
  1530. Originally the audio device was only opened once and then it stayed open
  1531. for the whole game.  Now it is opened and closed all the time.
  1532. So nowadays the first time we open it, we are using a zeroed out ioaudio
  1533. struct, and everytime thereafter we are using an ioaudio struct with stuff
  1534. in it.
  1535.  
  1536. AS AN EASY TEST, JUST MEMSET THE STRUCT TO 0 AND PLAY A TEST GAME THAT WAY
  1537. TO SEE IF THE BUG GOES AWAY!  The bug is still there!  Ack!
  1538.  
  1539. Simply add in a ADCMD_FINISH; Wait();  before the CloseDevice.
  1540. I did this and played a short test game.  It only messed up once and that
  1541. is when I noticed the speech playing on 2 channels at once.  However I
  1542. don't know if it messed up before or after the speech.  I think it messed
  1543. up after the speech did.  Did the speech mess up on its own?  Or did it
  1544. mess up because the algosound messed up?
  1545.  
  1546. I played YET ANOTHER test game to see if it messes up with SPEECH OFF.
  1547. Ok the sounds NEVER messed up!  YAY!  So the only remaining sound effect
  1548. bug is in the speech system!  I looked over the code and didn't see
  1549. anything obvious.  I'm leaving this bug for SAI to fix.  If he can't fix it
  1550. then I'll just rip out the narrator.device speech and replace everything
  1551. with digital speech.
  1552.  
  1553.  
  1554. * HACK FIX: In order to work around the sound channel problems caused by
  1555.   our use of narrator.device, I have put some code into JCsound so that the
  1556.   -2 option (play a mono sample on both left & right channels) will switch
  1557.   down to playing it on _any_ channel it can get hold of if one of the
  1558.   channels is unavailable.  I played part of a test game and the sounds
  1559.   seem to be working 100% now with this fix installed.  But I'm sick now
  1560.   and I only played several turns.  ALLEGEDLY FIXED.
  1561.  
  1562. * BUG: Hippocrates randomly gained a combat point and it made him have 0
  1563.   combat!!! Fix this by checking for negative combat and if so then -1 the
  1564.   combat.  Make sure it doesn't go below -max_combat.  NOW FIXED.
  1565.  
  1566. * MODIFIED RANGE BOOST: so that if it is applied to a creature with
  1567.   negative ranged combat, it will subtract 4 from his ranged combat; thus it
  1568.   will heal 4 points more.  It still adds 4 to the range as usual.
  1569.  
  1570. * BUG Grizzly Bear Combat sound is not working!!!  NOW FIXED.
  1571. * BUG Kill files are not working!!! (Stone Giant didn't say "I kill you")
  1572.   NOW FIXED.
  1573.  
  1574. Always REMEMBER to enclose filename in \" marks!  So spaces in the name
  1575. won't mess it up!  Maybe I should make this into a function?
  1576.  
  1577. * Read docs for narrator.device to see if it is ok to send in an
  1578.   uninitialized struct when opening the device?  Yes it is 100% ok to do
  1579.   this.  According to the RKRM: Opening the device sets the struct to all
  1580.   default values.
  1581.  
  1582. * April 15th: Installed OS 3.1 ROM into JJ's A3000 computer.  He now has a
  1583.   full fledged OS 3.1 computer.  I would have installed a web browser on it
  1584.   so he could read the .html spell docs but he only has 4 megs of fastram.
  1585.  
  1586. * BUG: A computer wizard cast Vodka on the independents.  Their combat was
  1587.   halved like it was supposed to be... but it never said "Independents are
  1588.   drunk with vodka" and the screen did not wave during their movement.
  1589.   NOW FIXED.
  1590.  
  1591. =========================================================================
  1592. April 15th JJ bug report:
  1593. * BUG: Generators do not heal 7 intlligence like the stats say.
  1594.   (Note from JC: Actually NONE of the generator's stats heal like they are
  1595.    supposed to except for life.)   NOW FIXED.
  1596.  
  1597. * BUG: Casting Inanimorphobiosis or StoneToFlesh on a ShadowWood doesn't
  1598.   let you move it around and attack with it.  NOW FIXED.
  1599.  
  1600. * BUG: He walked up next to a computer wizard and did not get engaged to him!
  1601.   But that's ok because the wizard was inanimate and you are not supposed
  1602.   to get engaged to inanimate objects.  BUT this inanimate wizard was roaming
  1603.   around killing things!  So the real bug is:
  1604.  
  1605. * BUG: Inanimate Wizards can still move and attack.
  1606.   I have 2 options for this:
  1607.   A: Make it illegal to cast FleshToStone and MassPetrification on wizards.
  1608.   B: Allow it to be legal and just fix it so that Inanimate wizards can no
  1609.      longer move or attack.  They will still be able to cast spells as usual.
  1610.      And they can reanimate themselves by casting StoneToFlesh or
  1611.      Inanimorphobiosis or Restoration on themselves.
  1612.  
  1613.   I am choosing option B: for now.  If for some reason this does not play
  1614.   well then I can change to option A:
  1615.   NOW FIXED.
  1616.  
  1617.  
  1618. * BUG: An Aerial Servant with max combat gets covered by a growth.  You kill
  1619.   the growth and it still has its max combat. Only the life is cut in half.
  1620.   That is ok.  But if a creature is under a growth for a long time, it eventually
  1621.   gets all of its stats set back to their original values but with life cut
  1622.   in half.  This effect can cause massively awesome creatures to be reset
  1623.   to their original lameness.  This effect can also be used to heal poisoned
  1624.   creatures.
  1625.  
  1626.   --------------------------------------------------------------------------
  1627.   Note from JC: the actual "bug" is that if a creature is covered by a growth
  1628.   and the growth dies of natural causes then the creature's stats are reset
  1629.   to their original values.  However, this is not a bug but merely an
  1630.   "Undiscovered Rule" :)
  1631.  
  1632.   It can be interesting to intentionally allow your poisoned or wounded
  1633.   creatures to be covered so that they can be healed.
  1634.  
  1635.   If you want the creature to be returned to its original stats then you must
  1636.   let it stay covered till the growth dies of natural causes.
  1637.  
  1638.   If you do NOT want the creature to be returned to its original stats then
  1639.   you must kill the piece of growth ASAP.
  1640.  
  1641.   In either case, the life of the creature will be set to one half of its
  1642.   normal maximum.
  1643.   --------------------------------------------------------------------------
  1644.  
  1645. End of April 15th, JJ Bug Report.
  1646. ===========================================================================
  1647.  
  1648. * PLAYED a test game where my wizard and the computer wizard were both
  1649.   inanimate.  It was very interesting and played quite well!
  1650.  
  1651. * BUG: Artifact Creature is covered by growth, growth dies of natural causes,
  1652.   Artifact creature is no longer an artifact but a REAL creature.  NOW FIXED.
  1653.  
  1654. * BUG: Red Dragon Scroll is covered by a growth, growth dies of natural causes,
  1655.   Now the scroll is a REAL Red Dragon belonging to NOBODY!  NOW FIXED.
  1656.  
  1657. * BUG: My wizard is inanimate.  But I can still click on him.  When I move
  1658.   him he doesn't move but some sort of bizarre copy of him is made whose
  1659.   animation is composed of a wizard image, a dead image of something and a
  1660.   grey elf image.  All its stats are 0, but its initial stats are all set to
  1661.   those of a wizard, so its stats look like those of a dead wizard.  Even
  1662.   though it says its "Nothing. (Nobody)"  NOW FIXED.
  1663.  
  1664. * BUG: My Inanimage is ONLY healing my adjacent wizard!  It is somehow not
  1665.   healing my Brown Bear and my Wood Elf.  DOH! This is not a bug!  The
  1666.   description of the Inanimatologist clearly states that it only heals
  1667.   adjacent inanimate objects.  And since my wizard is inanimate in this game
  1668.   he get's healed but my other creatures are not.  EVERYTHING IS OK.
  1669.  
  1670. * OH GOOD GRIEF!  OK Chaos is running and I'm online.  I play chaos for a
  1671.   while.  I'm now in the spell-selection phase.  I notice the modem lights
  1672.   look strange and I go to check my email.  Yam reports that I don't have a
  1673.   TCP/IP stack running (The modem has just gone offline due to it being such
  1674.   a long time since I did anything online).  SOMEHOW this error window
  1675.   freaked out the music in Chaos!!!!  THIS SHOULD BE IMPOSSIBLE!!!  The music
  1676.   has allocated the sound channels at MAX_PRI!!!!   Arrrgh!
  1677.   Well at least I figured out the bug:  The music system defaults to using
  1678.   CIA timer chip #1.  If it isn't available it uses CIA timer chip #2.
  1679.   But Miami can ONLY use CIA timer chip #1!  If it isn't available it just
  1680.   tries to steal the use of it, thus screwing up anything that is using it!
  1681.   So really this is a bug in Miami.
  1682.  
  1683. * Solution: Go online BEFORE starting Chaos.  If you go offline for some
  1684.   reason and you want to get back on just turn the music in Chaos off, then
  1685.   get online, then you can turn it back on if you like.
  1686.   If you forget about this and can't get online for some reason.  Just turn
  1687.   the music off and then you might be able to get online easily or Miami
  1688.   may have already internally crashed.
  1689.   AFAIK this problem only affects Miami, not other TCP/IP stacks.
  1690.  
  1691. * NOTE: Above 2 bugs things seem to have disappeared in late 2000.  I think
  1692.   maybe it was just caused by some weird memory corruption bug that got fixed
  1693.   sometime after May of 2000.
  1694.  
  1695. * BUG: sm.c will not allow creatures with negative recovery.  Thus my
  1696.   newfangled Vampire won't work.  NOW FIXED.
  1697.  
  1698. ************************************************************************
  1699.                 COMPILE TIME REDUCTION: April 24, 2000
  1700. ************************************************************************
  1701.  
  1702. On a reasonably badly-fragemented (not terrible or anything)
  1703. 25Mhz 030 I did a complete recompile:
  1704. smake clean
  1705. smake
  1706. BEGIN: 3:17:42
  1707. END:   3:39:17
  1708. 21 minutes and 35 seconds.  The last 50 seconds were just doing
  1709. pool2tex <pool.txt >spells.tex
  1710.  
  1711.  
  1712. On a fresh reboot with no memory fragmentation on 25Mhz 030:
  1713. smake clean
  1714. smake
  1715. BEGIN: 4:17:47
  1716. END:   4:38:33
  1717. 20 minutes 46 seconds.  The last 45 seconds were just doing
  1718. pool2tex <pool.txt >spells.tex
  1719.  
  1720.  
  1721. I have now made a gst (Include:all.gst) by reading the docs in
  1722. sc:source/all.gst.
  1723.  
  1724. I have now modified the makefile to use the GST.
  1725.  
  1726. Now I will time a complete recompile using the GST.
  1727. BEGIN: 5:09:46
  1728. END:   5:22:27 with a Slink error 510: _GfxBase symbol - Near Reference to
  1729.        data item not in near data section.  First reference in cast.c to start.c
  1730. 12 minutes 41 seconds + another 50 seconds for pool2tex = 13 minutes 31
  1731. seconds.
  1732.  
  1733.  
  1734. While on YAM+IRC with 3 open windows it took this long:
  1735. 6:18:03
  1736. 6:36:03  18 minutes!
  1737.  
  1738. Redo timing test with fresh computer and not on internet!  No errors
  1739. BEGIN: 12:22:47
  1740. END:   12:36:18   13 minutes and 31 seconds.
  1741.  
  1742. If we subtract out the time that the spellmanager consumes in its
  1743. processing of files and the time that pool2tex burns (total of 2 minutes)
  1744. + the 22 seconds spent printing warnings to the screen then using a GST has
  1745. doubled the compilation speed.
  1746.  
  1747. I could rewrite pool2tex and the spellmanager and save around 1.5 minutes
  1748. thus bringing the compile time down to only 12 minutes but I don't have
  1749. time for that right now.
  1750.  
  1751. If I then switched to using a 25Mhz 040 then the complete recompile time
  1752. should drop to about 4 minutes.  Or if I bought a 66Mhz 060 then I could
  1753. get it down to 1.8 minutes.
  1754. ************************************************************************
  1755.               END COMPILE TIME REDUCTION: April 24, 2000
  1756. ************************************************************************
  1757.  
  1758.  
  1759. * SOUND BUG PERSISTS!  I just played a test game and sometimes the end of
  1760.   turn sound randomly does not play when I press the end turn gadget!
  1761.   ARRRRGGHH!!!
  1762.  
  1763.   HORRIBLE BUG: Twice today when I was shooting something the game totally
  1764.   freaked out and locked up.  Well once it crashed the whole machine and the
  1765.   other time it locked up.  AFAIK this is related to the speech/sound
  1766.   channel bug.  The only way I know of to fix this is to remove the
  1767.   computerized speech from the game permanently.
  1768.  
  1769.  
  1770. BUG: My ally cast Bless and the ChaosWavyTask triggered off 
  1771.   5 MuGuardianAngel hits: All are word reads:
  1772.   42ed8, 42ecc, 42ed0, 42ed4, 42ed8.
  1773.  
  1774. MuGuardianAngelBug: Whenever there is a hit, MuGuardianAngel makes some
  1775. kind of beep that completely corrupts the sound system.  It causes the
  1776. current sound effect or the very next one to run in an infinite loop.
  1777. Sending a ctrl-c to the JCsound task stops the infinite loop but the game
  1778. is still locked up.  Pressing ctrl-c in cpr is useless.
  1779. Maybe this is actually caused by the "heavy cpu load bug" that I found
  1780. later on.  A hit stops all tasks for around 1 second.
  1781.  
  1782.  
  1783. FACT: JCsound cli program works perfectly when I run it from the shell.
  1784. FACT: using JCsound from within Chaos via Execute("run ram:chaosdir/JCsound
  1785.       filename -2 >nil:",0,0); causes random enforcer hits and crashes.
  1786. FACT: Many years ago I made a Star Trek game.  It worked perfectly.
  1787.       Then one day I put digital sound effects in the game using this exact
  1788.       same technique.  Only it was just some sound sample player program that
  1789.       I had, I don't know where it came from.  So it was coded by a totally
  1790.       different person using totally different techniques. I called the cli
  1791.       sound player program using the exact same Execute(); technique and from
  1792.       that moment on the game started randomly crashing and locking up.  I
  1793.       never figured out what was going on with that.  Now I think there is
  1794.       just plain a bug in using Execute() with programs that use audio.device.
  1795.  
  1796.       I JUST TESTED THIS CODE from within Chaos
  1797.            FOR (t=0; t<40; t++) DO
  1798.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1799.               Delay(300);
  1800.            NEXT // t++
  1801.       It worked perfectly.  No mungwall hits, no enforcer hits.  Now I'm
  1802.       back to thinking it is somehow a bug caused by some conflict between the
  1803.       algorythmic sounds and the digital sounds.  I tried it with a
  1804.       Delay(100) and it still worked perfectly.
  1805.  
  1806. * I just set the priority of the narrator speaking to 127 (MAXIMUM) so that
  1807.   nothing can steal its channel in the middle of it saying something.
  1808.   Perhaps this will fix the speech bug?
  1809.  
  1810. Ok I just #ifdef'ed all the audio code out of the game.  I turned off the
  1811. speech with the menu and played a test game.  It worked for quite a while
  1812. but then the SAME old audio bug came back to haunt me!  The 4th thing I
  1813. killed with my Ghost caused the JCsound to freak out and cause enforcer
  1814. hits then the whole computer crashed and reset!  Why is that JCsound works
  1815. perfectly under test conditions but crashes randomly in the real game?
  1816. I think this must be related to cpu load now.  I'll do more tests with the
  1817. CPU loaded up with stuff to do.
  1818.  
  1819. Ok I ran the above code loop test at Delay(100) with a gameboard that had
  1820. around 25 animated creatures on it.  Everything worked perfectly.
  1821.  
  1822. So then I switched to ExplorationMode because that burns a lot more cpu
  1823. cycles and ran the test again.  It was working and had played a few samples
  1824. then I clicked on my YAM icon (I had yam already running but it was
  1825. iconified).  This used 100% cpu power for about 2 seconds while it sorted
  1826. through the 604 incoming messages in my mailbox.  This caused 1 instance of
  1827. JCsound to "hang".  So that now the loop is playing a sound sample then
  1828. failing, then playing then failing in an alternating pattern.
  1829. I believe this is caused by doing a Wait on a certain bit and then only
  1830. getting 1 message when in fact 2 or more messages may have already arrived.
  1831.  
  1832. * HACK FIX: I have set the priority of JCsound to run at 126.
  1833.   Actually JCsound was ALWAYS supposed to have been running at priority of
  1834.   126 or 127 since it barely uses any cpu time and it must run at a high
  1835.   priority to ensure that there is no buffer underflow.
  1836.   Now that I have set the high priority the above test works perfectly!
  1837.   However there is still something fundamentally wrong with the
  1838.   architecture of the JCsound cli command.  And someday if some other running
  1839.   task does a Forbid() for 1 or 2 seconds the bug will come back.
  1840.   But at least the game should now run perfectly under "normal" conditions.
  1841.  
  1842. I played a test game with no algorythmic sounds and no speech and the VERY
  1843. FIRST digital sound effect (Combat/Ghost) crashed the machine!
  1844.  
  1845.  
  1846. I repeated the test under extra heavy cpu load.  I was decompressing all
  1847. the jpegs in a directory.  No bugs, no flaws.
  1848.  
  1849. So why does it work perfectly when I do it in the test loop but it crashes
  1850. so often when I play it as an attack sound during combat????????
  1851.  
  1852. Countless other tests producing various results ad nauseum...
  1853.  
  1854. * DOUBLE BUFFERING BUG FIGURED OUT!!  First of all the entire bug is a
  1855.   simple buffer underflow error.  However I wasn't correctly handling the
  1856.   incoming messages so JCsound could hang and never exit.  I still haven't
  1857.   figured out why it would crash.
  1858.  
  1859. * THE REASON why it was crashing after I had set its priority to 126 is
  1860.   this:
  1861.   1. I ran the JCsound program from the shell to test it.  JCsound set
  1862.      itself to pri 126, did its thing and exited.  I had no idea that the CLI
  1863.      inherits the priority of every program that you run in it!  JCsound never
  1864.      set its priority back down to 0 so the default priority of that CLI
  1865.      became 126!
  1866.   2. It worked great in the shell so I then ran Chaos from the CLI.
  1867.      This means Chaos was running at priority 126!  So this completely
  1868.      nullified the effect of running JCsound at pri 126!  JCsound was still
  1869.      having to battle Chaos for cpu time!
  1870.      Since the default buffers of JCsound are only 30k (a bit more than
  1871.      1 second) the buffers were underflowing and messing up.
  1872.      So anyway running Chaos from that CLI caused the JCsound program to
  1873.      crash.
  1874.  
  1875. * JCSOUND ALL FIXED NOW!
  1876.  
  1877.  
  1878. DO A TEST:
  1879.            FOR (t=0; t<40; t++) DO
  1880.               SayCreatureName (0);
  1881.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1882.               Delay(11);
  1883.               WaitJCsound();
  1884.            NEXT // t++
  1885. IT WORKS PERFECTLY!!!
  1886.  
  1887.  
  1888.            FOR (t=0; t<20; t++) DO
  1889.               StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
  1890.               Delay(350);
  1891.               endmod();
  1892.               Delay(5);
  1893.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1894.               Delay(11);
  1895.               WaitJCsound();
  1896.            NEXT // t++
  1897. First 1 worked, second one failed!  Finally a reproducable error!!!
  1898.  
  1899.  
  1900. Countless more tests and crashes later...
  1901.  
  1902. I can play a mod and then a sound sample.
  1903.  
  1904. But I can't play a subsong in a mod then a sound sample.  It crashes the
  1905. machine.  Something about playing subsongs is corrupting the audio.device.
  1906.  
  1907. Ok I modified the start routine so now at least it always starts playing
  1908. correctly.  However, upon stopping the subsong, the next use of
  1909. audio.device still crashes.
  1910.  
  1911. I tested this with a stopmod() before the endmod();  It still crashes :(
  1912.               StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
  1913.               Delay(350);
  1914.               stopmod();
  1915.               endmod();
  1916.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1917.               Delay(11);
  1918.               WaitJCsound();
  1919.  
  1920.  
  1921.  
  1922. // This one crashes too! :(
  1923.               StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
  1924.               Delay(350);
  1925.               StartMod("Music/Mod.ChaosTheme42",0); // song 5 is ONLY the artifact changing music.
  1926.               endmod();
  1927.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1928.               Delay(11);
  1929.               WaitJCsound();
  1930.  
  1931.  
  1932. // This works!!!!  (although there is a slight audio glitch at the end
  1933. // because it plays song 0 for 1/50th of a second before stopping the mod..)
  1934.               StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
  1935.               Delay(350);
  1936.               StartMod("Music/Mod.ChaosTheme42",0);
  1937.               Delay(1);
  1938.               endmod();
  1939.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1940.               Delay(11);
  1941.               WaitJCsound();
  1942.  
  1943.  
  1944. // This crashes as usual.
  1945.               StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
  1946.               Delay(350);
  1947.               loadmod("Music/Mod.ChaosTheme42");
  1948.               Delay(1);
  1949.               endmod();
  1950.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1951.               Delay(11);
  1952.               WaitJCsound();
  1953.  
  1954. // This doesn't crash but the volume stuff doesn't work on medmods.
  1955.               StartMod("Music/Mod.ChaosTheme42",5); // song 5 is ONLY the artifact changing music.
  1956.               Delay(350);
  1957.               loadmod("Music/Mod.ChaosTheme42");
  1958.               Delay(350);
  1959.               mvolume=0;  // All this volume control stuff has NO effect on medmods
  1960.               playing=1;  // because the medmod replayer code being used is not
  1961.               playervolume(); // not set up to handle volume changes! :(
  1962.               playing=0;
  1963.               playmod(); // or plmod()
  1964.               Delay(350);
  1965.  
  1966.               endmod();
  1967.               Execute("run ram:ChaosDir/JCsound \"Sounds/Combat/Ghost\" -2 >nil:",0,0);
  1968.               Delay(11);
  1969.               WaitJCsound();
  1970.  
  1971. Perhaps make a an empty pattern to jump to?  Blah. To much trouble.
  1972. Then I can play song 0 but pattern jump to an empty pattern that makes no
  1973. noise. Blah. To much trouble.
  1974.  
  1975. I could simply StartMod("SomeStupidEmptyMod",0);
  1976. That mod could either do absolutely nohthing or it could play an instrument
  1977. on all 4 channels. But first it would set all 4 channels to volume 0!
  1978.  
  1979.  
  1980. April 28th: The AC compressor in my car broke.  It was making loads of
  1981. smoke.  Ack.  I've only been driving the car for 3 months!  I spent $1700
  1982. to buy it + $400 repairs (new brakes) the first day I drove it to work.
  1983. Now I can either get a rebuilt AC system for $853.10 with 3 month warranty
  1984. or a new one for $1153.79 with 1 year warranty.
  1985.  
  1986.  
  1987. The _only_ good thing about this is I had to miss work on the 29th, 30th
  1988. and 31st so I was able to spend all day fixing all Frédéric's bugs.
  1989.  
  1990. *************************************************************************
  1991. Fri, 28 Apr 2000 11:19:21 -0700 (PDT) Bug report from Frédéric
  1992.  
  1993. > Denotes the writing of Frédéric
  1994.  
  1995. The responses are written by me (James Conwell)
  1996.  
  1997.  
  1998. > * When an alliance is made, it should end at the end
  1999. > of the game, but actually it is valid again for the next game.
  2000.  
  2001. This is NOW FIXED.
  2002.  
  2003. I beleive that setup options should stay the same
  2004. from one game to the next unless you change them.
  2005.  
  2006.  
  2007.  
  2008. > * The giant spider is said to be poisonous IIRC, but
  2009. > it isn't.
  2010.  
  2011. I don't remember it ever saying that.
  2012.  
  2013. In the current version the spider is not poisonous
  2014. and it doesn't say it is poisonous.
  2015.  
  2016.  
  2017.  
  2018. > * You said in the readme that killing a generator
  2019. > would give 4 bonus spells,
  2020. > but I only got one (it was not a bipedal, aviary or
  2021. > dragon nest, but a full-blown generator).
  2022.  
  2023. Wow!  Someone actually reads the readme! :)  I think
  2024. you must be about the only person to do such a thing
  2025. :)
  2026.  
  2027.  
  2028. You only get _1_ spell.  But you get to pick it from
  2029. a list of _4_ spells.  This way your chances of
  2030. getting a REALLY good spell are greatly increased.
  2031.  
  2032. The only way to get to pick more than 1 bonus spell
  2033. is to earn more than 1 bonus spell in 1 turn.  This
  2034. usually means you must kill more than one bonus
  2035. monster/thing in one turn.
  2036.  
  2037. There are other ways which I will leave for you
  2038. to discover :)
  2039.  
  2040.  
  2041.  
  2042. > * Abduction seems to be broken. It did work in v2.3d
  2043. > but it v2.5d the abducted creatures became independent.
  2044.  
  2045. I spent 20 minutes testing out Abduction and I found out that
  2046. Abduction was totally broken!  It didn't "immediately become independent
  2047. again", it NEVER EVER changed the ownership of anyone ever!!!
  2048. (unless you were player 1 and you abducted cell 1... or if you were player
  2049. 2 and abducted cell 2 etc.)
  2050.  
  2051. I always knew I hated the Abduction spell for some reason.  Now I know why.
  2052. Because it didn't work!
  2053.  
  2054. I went back and checked v2.5 and v2.3 and the programming for Abduction
  2055. was identical so it appears to have had the exact same bug as v2.71.
  2056.  
  2057.  
  2058.  
  2059. > * (haven't tried yet with v2.5d) The turmoil spell
  2060. > was broken in v2.3d: the
  2061. > creatures were moved but somehow retained their old
  2062. > positions by some
  2063. > respects. And mounts were moved but not the wizards
  2064. > mounting them (which
  2065. > merely disappered and were still able to cast
  2066. > spells).
  2067.  
  2068. I wish you had reported this bug earlier! :)
  2069.  
  2070. Someone beat you to it and reported this very bug a
  2071. couple of weeks ago and I fixed it the next day.
  2072. Turmoil was broken from the day it was implemented until v2.81.
  2073.  
  2074.  
  2075.  
  2076. > * You say that Bahamut is unique but I've frequently
  2077. > (when playing with lots of scrolls) cast several platinum dragons.
  2078.  
  2079. Yes the description of the Platinum Dragon has always bothered me.
  2080. It has never been unique despite what the description said.
  2081. I've just been waiting for someone to complain about
  2082. it to give me an excuse to fix it.  I have changed the description to
  2083. no longer say it is unique.  NOW FIXED.
  2084.  
  2085.  
  2086.  
  2087. > * When using charm, you could convince scrolls to
  2088. > come on your side ! I can't imagine it's intended.
  2089.  
  2090. hehehehe this is hilarious!
  2091.  
  2092. After thinking about this a while I've decided to leave this the way it is
  2093. so that way Charm has an extra secret use when playing in Exploration Mode:
  2094. It can help you map out the level and show you where some of the scrolls are!
  2095.  
  2096. Ok, I admit that it makes no sense to be able to "Charm" a scroll... but
  2097. it does make the Charm spell more interesting.
  2098.  
  2099. We'll just leave it like it is until more people form opinions on this
  2100. matter.  If anyone has an opinion on this matter please write me and let me
  2101. know.
  2102.  
  2103. It needs further testing in Exploration Mode.
  2104.  
  2105.  
  2106.  
  2107. > There are many other little things I don't remember
  2108. > at the moment but I'll note them down so I can tell you.
  2109.  
  2110. Yes please note down any bugs or discrepancies that
  2111. you find.  I can't fix a bug if I don't know about it.
  2112.  
  2113. If you don't write them down immediately, you'll
  2114. forget them like I do :(
  2115.  
  2116. You should keep your Cygnus Ed Professional running
  2117. with a .txt file of possible bugs/weirdnesses/flaws.
  2118.  
  2119. > Anyway Chaos is really a great game, and
  2120. > I'd like to see an update!
  2121.  
  2122. > ----- Bug Report Part 2: -----
  2123.  
  2124. > Now the things I wrote down today:
  2125. > * There is no difference between the effects of the magic knife and the
  2126. > magic sword: both add 3 points of combat ability to the wizard and enable
  2127. > him to attack undeads. I think the magic knife should not add combat
  2128. > points, just be effective against undeads.
  2129.  
  2130. This has bothered me for years.  I just never got around to changing it.
  2131.  
  2132. Today I have changed it so that Magic Knife gives only +2 combat and
  2133. Magic Sword still gives +3 combat.
  2134.  
  2135. Technically a Magic Knife should only give +1 combat and a Magic Dagger
  2136. should give +2 combat.  But I was afraid people might confuse "Magic
  2137. Dagger" with "Poison Dagger" so I left the name of the spell as "Magic
  2138. Knife"
  2139.  
  2140.  
  2141.  
  2142. > * My gray elf is engaged to an earthquake ! I just cast "No grow" on that
  2143. > earthquake to which my gray elf was adjacent. It's like it's behaving like
  2144. > a creature, as someone just cast dark power on it ! :-) And another was
  2145. > just brain-drained. Somehow they are still growth because "no grow" can be
  2146. > cast a second time. But this attribute is not highlighted in the second
  2147. > info panel.
  2148.  
  2149. hehehe this all sounds hilarious! :)
  2150.  
  2151. There is also another problem: If there is a sea of growth and you cast No
  2152. Grow on a line of the growths to form a "wall" of non-growing growths then
  2153. nothing stops the other growing growths from growing over the nongrowing
  2154. growths. Doh!  So I am changing No Grow to make the growth become inanimate
  2155. as well as making it lose the Growth attribute.  Growths don't grow
  2156. over inanimate objects (except for the Earthquake) so now growths
  2157. cannot grow over the things you cast "No Grow" on.  And you won't
  2158. get engaged to them now and you won't be able to cast Brain Drain or
  2159. Justice on them either.                                     NOW FIXED.
  2160.  
  2161. * BUG: You can cast No Grow on something then cast No Grow on it again and
  2162.   again.  This is silly and wasteful and not what I intendended.  NOW FIXED.
  2163.  
  2164.  
  2165.  
  2166. > * I think there should exist a counterpart to range boost: some sort of
  2167. > "range drain"... Currently (v2.5d), only invulnerability or reflector can
  2168. > save you from range combat. And it only applies to the wizard!
  2169.  
  2170. I already added in a Range Drain Beam spell back in v2.7.  You need to
  2171. upgrade.
  2172.  
  2173.  
  2174.  
  2175. > * The only way to add recovery to some attributes like intelligence or
  2176. > agility seems to be the "touch of God" (or chaos lord :-) ). Why not add a
  2177. > feature like you did for magical resistance: e.g. add some intelligence
  2178. > recovery points if the brain boost is applied to a creature with max
  2179. > intelligence ? Same for agility, combat, range combat, maybe others ?
  2180.  
  2181. I will take this under consideration.
  2182.  
  2183.  
  2184.  
  2185. > * When playing with many scrolls, sometimes a "radioactive land" scroll
  2186. > appears. It has no description (empty screen) and any creature entering or
  2187. > shooting in that cell dies. But it's labelled as a scroll.
  2188.  
  2189. I fixed this today.  Read below for more details.
  2190.  
  2191.  
  2192.  
  2193. > * I can remember one time (with v2.3d) someone had cast "eye for an eye".
  2194. > The manticore my wizard was riding killed a creature of that wizard, so it
  2195. > died. But my wizard hadn't reappeared ! It could cast spells but was nowhere
  2196. > on the board. I don't know if this bug is still there...
  2197.  
  2198. Well I played a test game just now on v2.81 and my Wizard was riding a
  2199. manticore and he killed the other wizard's manticore (which was being
  2200. ridden by him). We both had Eye for an Eye.  Everything worked perfectly.
  2201.  
  2202. End Frédéric bug report.
  2203. **************************************************************************
  2204.  
  2205. * BUG: Computer creatures will NEVER move onto a Pit Scroll or a Radioactive
  2206.        Land Scroll.  NOW FIXED.
  2207. * BUG: Computer creatures will NEVER shoot a Pit Scroll or a Radioactive
  2208.        Land Scroll.  NOW FIXED.
  2209. * BUG: Any creature moving onto a Radioactive Land Scroll dies. NOW FIXED.
  2210. * BUG: Any creature moving onto a Pit Scroll dies.  NOW FIXED.
  2211. * BUG: Any creature shooting a Radioactive Land scroll dies.  NOW FIXED.
  2212. * BUG: Shooting a Pit Scroll says "Wasted Shot" and does not kill the
  2213.        Scroll.
  2214.  
  2215. * BUG: When playing with Scrolls, sometimes a Radioactive Land Scroll
  2216.   appears.  But Radioactive Land isn't even a real spell that can be cast.
  2217.   So I must either:
  2218.   A) Never allow a Radioactive Land Scroll to appear in the first place.
  2219.   B) Rewrite the Radioactive Land spell to be a "real" spell.
  2220.      What should I do?
  2221.   It is my belief that Sean intended that Radioactive Land should not be a
  2222.   "real" spell so I will simply modify the scroll code to never generate one.
  2223.   uhhh... what the hell....  There is already code to prevent spells of 0
  2224.   probability being placed as scrolls.
  2225.  
  2226. * BUG: QueryProbability() is BROKEN!  It has never worked!  It always
  2227.   returns the probability of the spell above it in the list!
  2228.   NOW FIXED!
  2229.  
  2230. * BUG: SetProbability() is BROKEN! It has never worked!  It always sets the
  2231.   probability of the wrong spell!  NOW FIXED!
  2232.  
  2233. * BUG: All saved game files have the wrong probability matrix saved in
  2234.   them.  I DID NOT FIX THIS.  New games will be saving the numbers correctly.
  2235.  
  2236. The only reason spell probabilities were correctly displayed on the spell
  2237. information screen is because the code was hacked to say:
  2238. QueryProbabilty(spell-1);
  2239.  
  2240. Note to Sean: Please please please don't write any more functions that
  2241. require a real number - 1.   Please make the functions require a real
  2242. number instead of a real number -1.
  2243.  
  2244. Please please please don't write any more arrays that require an index real
  2245. number -1.  Please make the arrays require a real number instead of a real
  2246. number -1.
  2247.  
  2248. If this means not using the 0th element then that is totally ok.
  2249.  
  2250. The SpellProbability[] array is still off by 1.  I only fixed the functions
  2251. to take a normal parameter.  Rewriting the SpellProbabilty array to use
  2252. normal numbers requires rewriting various pieces of code that have lots of
  2253. +1 and -1 convolutions due to the array being set up wrong in the first
  2254. place.  Leaving this for SAI to fix.
  2255.  
  2256.  
  2257. Now that I have fixed those probability functions, Radioactive Land Scrolls
  2258. and other 0 probability spells will not be showing up anymore!
  2259.  
  2260.  
  2261.  
  2262. ???: I moved my Dire Wolf to within 3 squares of a Ghast and yet
  2263. my Dire Wolf did not smell him!!  He was _exactly_ 3 squares away.
  2264. OK, this is because the Dire Wolf's smell requires line of sight and the
  2265. intervening unexplored squares block line-of-sight.  So actually it is
  2266. technically working the way it is supposed to.
  2267.  
  2268. I could change it so that the Dire Wolf's sense of smell does not require
  2269. LOS.  This would make it more realistic when there are empty unexplored
  2270. squares between the wolf and the other creature.  But it would make it less
  2271. realistic if there were 2 solid walls between the wolf and the other
  2272. creature.  This would be easy to do.
  2273.  
  2274. I could change it so that the Dire Wolf's sense of smell requires LOS but
  2275. the LOS checking could be changed to use what is REALLY in the cell.  Thus it
  2276. would ignore empty unexplored cells. This would require real work...hmm...
  2277.  
  2278. If anyone has any opinions on this subject then please let me know.
  2279.  
  2280.  
  2281. * STUPID: The computer cast Combat on a Bolter Wall!  NOW FIXED.
  2282.  
  2283. If the Bolter Wall was an inanimate object in the first place, none of
  2284. these Bolter Wall bugs that we've had over the years would have ever
  2285. happened.
  2286.  
  2287. * BUG: My dragon killed a wizard who just cast some trees.  The game made the
  2288.   death sound of a dragon for each tree that then collapsed. (8 times).
  2289.   This is because I was using isDragon(id) instead of isIDdragon(id).
  2290.   NOW FIXED.
  2291.  
  2292. * BUG: Mass Morph is broken!  It _ONLY_ morphs generators!
  2293.   I have changed it to morph all creations EXCEPT generators.  NOW FIXED.
  2294.  
  2295. * FLAW: Casting Mass Morph on something belonging to Nobody results in all
  2296.   empty cells being morphed into Magic Wood Trees.  NOW FIXED.
  2297.  
  2298. * BUG: Sometimes the growths of dead wizards are growing all over the
  2299.   board.  Explanation: a wizard cast some trees on some fire and other
  2300.   growths.  When he dies all the visible board is put to sleep.  Then the
  2301.   trees explode, thus causing those growths to go back to the visible part
  2302.   of the board.  In this manner the growths owned by the dead wizard escape
  2303.   being put to sleep or silently removed.  NOW FIXED.
  2304.  
  2305. * NEW BEHAVIOR: I don't know if anyone ever noticed or not but it used to be
  2306.   that when a wizard died, most of his buried creatures were silently removed.
  2307.   I have now changed this so that they are merely put to sleep.
  2308.  
  2309. * COMPRESSION of Saved Games implemented using lha.  From now on when you
  2310.   save a game as "Blah" it is lha compressed into Blah.lha.  Attempting to
  2311.   load a .lha save file autodecompresses it.  This saves about 70k per save
  2312.   file.
  2313.  
  2314.           Before Compression : After Compression
  2315.   JamesConwellLevels: 222556    9573
  2316.   SAI_Levels:         667618   29236
  2317.   Total:              890714   38809
  2318.  
  2319.   SAVED 851K!!!!!!
  2320.  
  2321.  
  2322. Tuesday May 16th, 2000
  2323. I've been ripped off at my job each day for several days now.  I have been
  2324. extremely stressed out for over 1 week now and have done almost nothing.
  2325. Today I talked to an attorney and I finally calmed down enough to be able
  2326. to do some coding:
  2327.  
  2328. * AUTOSAVE FEATURE IMPLEMENTED:  This feature defaults to ON.  It will save
  2329.   the game automatically on EACH human wizard's turn.  Each save is done into
  2330.   a different filename.  Example filename "004p8AutoSave.lha".  This means
  2331.   that this is the savefile for turn 004, player 8's turn.  The turn number
  2332.   is first so that the files will list in numerical order in the
  2333.   filerequester.
  2334.  
  2335.   From now on if you find a horrible bug that crashes the machine or
  2336.   something you can ALWAYS go back to your last saved position (Because it is
  2337.   saved automatically).  You can then replay the turn over and over again
  2338.   to figure out exactly what it is that is triggering the bug.  This should
  2339.   greatly benefit playtesters the world over.
  2340.  
  2341. * IMPLEMENTED all of Frédéric's spell-description corrections/clarifications
  2342.   for all spells beginning with the letters A-E.
  2343.  
  2344.  
  2345. ===========================================================================
  2346. * BUG: Disrupt drains the intelligence of creatures which are your allies.
  2347.   NOW FIXED.
  2348.  
  2349. This seems like a good time to vote on the Disrupt spell:
  2350.  
  2351. This spell causes a momentary lapse of vision in all enemy
  2352. creatures. It can prove fatal to weak minded creatures and causes permanent
  2353. damage to the cerebral cortex of those that survive.  This spell currently
  2354. does not affect wizards, growths, inanimate objects or scrolls.
  2355.  
  2356. Frédéric has proposed that Disrupt should be changed to affect
  2357. wizards.  Do you have an opinion on this?
  2358.  
  2359. You can vote for, against, or no opinion.  Or whatever you want 8)
  2360.  
  2361.  
  2362. New Zealand makes this statement:
  2363. My general opinion is that it should be difficult to kill wizards
  2364. with "at a distance" type spells. I know there are other execeptions
  2365. to this already, e.g. curse.
  2366.  
  2367. However, since the disrupt spell is relatively rare, I don't see a
  2368. problem with making the change. It is definitely best to have it
  2369. not affect growths, since otherwise it would kill most of them.
  2370.  
  2371.  
  2372. Hungary has this to say:
  2373. After I've searched what does it mean the "cerebral cortex" expression, my
  2374. opinion is the follow:
  2375.  
  2376. If it is the same like brain drain, but it has effect on the whole playing
  2377. area, I say: OK, let it has affect on the wizards and all object (all means
  2378. EVERYTHING). Let's rise up the CHAOS!!!!
  2379.  
  2380. JC replies:
  2381. Since the description says it affects the cerebral cortex it should only
  2382. affect creatures.  Inanimate objects and growths do not have a cerebral
  2383. cortex.  Technically this spell should not affect the Robot, but that is
  2384. an issue for another time 8)
  2385.  
  2386. I feel that since the spell does not require line of sight and since it
  2387. already affects huge numbers of enemies I am mostly against applying its
  2388. damage to wizards.
  2389.  
  2390. If you are playing a game against 7 enemy wizards and each wizard has 4
  2391. creatures on the board then casting Disrupt will damage 28 enemy creatures!
  2392. Isn't that enough?
  2393.  
  2394. Also you don't have to pick a particular enemy to damage.  It just damages
  2395. ALL enemy creatures.  Therefore I am mostly against the proposal.
  2396.  
  2397. However, since the spell only does 2 points of damage to intelligence
  2398. combined with the fact that it is very rare, I'm not totally against it.
  2399. Thus I vote -.75 points.
  2400.  
  2401.  
  2402.  
  2403. France votes FOR this proposal:              +1.0  point
  2404. New Zealand votes Neutral/For this proposal: +0.5  points
  2405. Ireland abstains:                             0.0  points
  2406. USA votes +1, -.75                           +0.25 points
  2407. -------------------------------------------------------------
  2408.                                       TOTAL: +1.75 points
  2409.  
  2410. Proposal Passes and is implemented on May 20th, 2000
  2411. ==========================================================================
  2412.  
  2413. * Created a MakeDemoOfChaos.txt AmigaDos script file to copy all the files
  2414.   needed to create a playable Chaos distribution into a Chaos/ dir.
  2415.   I actually used this to make a registered version of Chaos 2.81.  DONE.
  2416.  
  2417.  
  2418. Version 2.81 installed on JJ's computer on Monday, May 22nd, 2000.
  2419.  
  2420. END OF VERSION 2.81
  2421.  
  2422. BEGIN VERSION 2.82 International Language Version.
  2423.  
  2424. * IMPLEMENTED all of Frédéric's spell-description corrections/clarifications
  2425.   for all spells beginning with the letters F to Z.  Including complete
  2426.   rewrites of Magic Attack, Magic Bolt, Ice Breath, Lightning, X-Ray and
  2427.   Fireball.  DONE.
  2428.  
  2429. * CHANGED Pythons so they attack Life Force + Manuverability.
  2430.  
  2431. * ADDED a new "Language" menu option with English, Français, Hungarian,
  2432.   Deutsch, Español and Italiano options.  All options are mutually
  2433.   exclusive.
  2434.  
  2435. * BUG: Hold down the RMB.  Now select any language then select another
  2436.   language (DO NOT RELEASE THE RMB DURING THIS TIME).  The 2nd language you
  2437.    selected will be correctly highlighted and the 1st language will be
  2438.    correctly unhighlighted.  But internally the program still only knows that
  2439.    you selected the 1st language, thus the Language variable is now set to the
  2440.    WRONG value!  Ok, after some hours studying the RKRMs I worked out how
  2441.    to handle multiple selections in 1 MenuHandler() call.  NOW FIXED.
  2442.  
  2443. * Above fix has hopefully now prevented numerous other Menu problems from
  2444.   ever happening.
  2445.  
  2446. * ADDED some text to print when a promotion happens.
  2447. * ADDED some text to print when an Orc/Goblin/Troll gets a bow.
  2448. * ADDED some text to print when the game is AutoSaving.
  2449.  
  2450.  
  2451. -------------------------------------------------------------------
  2452. JJ complaints on May 25th, 2000:
  2453. 1: Range Boost didn't work on his Wizard with a Magic Bow.  NOW FIXED.
  2454. 2: He doesn't like the digital sound effects and wants a "Combat Sounds"
  2455.    on/off feature.  This took me 2 hours.  1 hour to do it and and 1 hour
  2456.    to debug it due to lame C STUPIDITY.  I wrote IF (MENUCombatSound)
  2457.    and the compiler generated NO ERRORS!  But there is no variable called
  2458.    MENUCombatSound!!!!!  And it didn't call the FUNCTION
  2459.    MENUCombatSound() either!  It just always evaluated the nonexistent
  2460.    variable as TRUE so the sounds were ALWAYS ON no matter what I did.
  2461.    NOW FIXED.
  2462. 3: The graphics on the info panels on his A3000 are in different
  2463.    proportions to the graphics on the main screen. He doesn't like this.
  2464.    This is due to limitations of the A3000 graphics chips, sorry.
  2465.  
  2466.    You can either:
  2467.    A) Redesign all 1000 graphics in the game by doubling their size
  2468.       vertically and then hand editing them to smooth out the resulting
  2469.       blockiness.  Assuming you can edit 5 graphics per hour this should
  2470.       take only 200 hours.
  2471.    B) Buy an Amiga 4000 or a suped-up Amiga 1200.
  2472. -------------------------------------------------------------------
  2473.  
  2474. * INTERNATIONAL LANGUAGE SUPPORT ADDED!  (Only for Spell Descriptions)
  2475.   IT WORKS GREAT!  Currently the only languages supported are English,
  2476.   Français and Hungarian.  The font still needs to be edited to contain
  2477.   accented characters, this is Frédéric's department.
  2478.  
  2479. * ELIMINATED all those stupid spell+1 and spell-- and spell+=1 constructs
  2480.   from SpellInformation().  This was all caused by PoolPos requiring a
  2481.   spellnumber-1 instead of a real spellnumber!  NOW ALL FIXED!
  2482.  
  2483. * ENFORCER HIT BUG!  Selecting "Scores" from the Menu somehow corrupts the
  2484.   value of the Global Variable "Language" and sets it to 8.  Then anything
  2485.   that uses the Language variable to access an array triggers off enforcer
  2486.   hits.  Hmmm... this was all caused by a missing break; after a
  2487.   END_SWITCH.  I guess most END_SWITCH statements need a break; after them.
  2488.  
  2489. * Wolverines now scavenge +3.
  2490. * Achiyalabopa now needs LOS for its sight range due to the fact that it is
  2491.   "low-flying".
  2492.  
  2493. * Wednesday, May 31st, 2000: Installed version 2.82 onto JJ's computer.
  2494.   My optical drive got tons of write-errors and it was a major problem to
  2495.   copy the game onto it.  I don't know what I will do for the next version
  2496.   :(
  2497.  
  2498. BEGIN version 2.83: Continuation of International Language Version.
  2499.  
  2500. * Hidden Horror + Reincarnation Bug Report by Frédéric:
  2501.   I had cast reincarnation on my hidden horror so as to get a golden dragon
  2502.   when it came close to that combat-enhanced enemy wizard (like this is said
  2503.   in the hidden horror description), but I only got a red dragon.
  2504.   NOW FIXED.
  2505.  
  2506. * Added in some code to read in all the catalog files.
  2507.  
  2508. To preserve file attributes on extracted lzx files type the following:
  2509. lzx -a x filename
  2510. lzx -a x filename dirname
  2511.  
  2512.  
  2513. * REPLACED most of the text in the game with an appropriate call to
  2514.   Message() which gives the correctly translated string according to the
  2515.   currently selected language.
  2516.  
  2517. * PROOFREAD, corrected & edited Frédéric's new doc sections on creature
  2518.   statistics and spell statistics.
  2519.  
  2520. =========================================================================
  2521. Begin Catalog Translation Problems
  2522. =========================================================================
  2523.  
  2524. Ok now I've had some serious problems over the last few days.
  2525. #1: French grammar is backwards when compared with English grammar so my
  2526. catalogs are useles.  But the solution is VERY easy, simply make use of the
  2527. new sprintf() (or related) routine in the Amiga OS that allows the
  2528. translator to switch the orders of the parameters around using positional
  2529. notation such as %1$s %2$s %3$ld.
  2530.  
  2531. #2: Well great, the only way I can figure out to use the new sprintf
  2532. in Amiga.Lib instead of the SASC sprintf is to link with Amiga.lib first.
  2533. But this is TOTALLY unacceptable because then the Amiga.lib printf would
  2534. replace the SASC printf and the amiga.lib version is totally bugged and
  2535. lame and worthless.
  2536.  
  2537. #3: Amiga.lib sprintf doesn't support many of the features of "real"
  2538. sprintf routines in C compilers.  For example it doesn't have floating
  2539. point support. :(
  2540.  
  2541. #4: Amiga.lib sprintf is lame and expects 16-bit ints.  Ack.  So all %d and
  2542. %c must be changed to %ld and %lc to compensate for this.
  2543.  
  2544.  
  2545. SOLUTION:
  2546. #1: We will have to continue to use the SASC sprintf for floating point
  2547. formatting and possibly other types of formatting.  The sprintf statements
  2548. using floating point will have to be broken apart into multiple steps.
  2549. Fortunately there is only 1 place in the game that uses a floating point
  2550. number in a translation string.  So this will be dead easy.  The other
  2551. floating point uses of sprintf are purely numerical and will not be
  2552. translated in a catalog file.
  2553.  
  2554. #2: I will implement a new JCsprintf routine which uses the totally cool
  2555. positional notation of AmigaOS RawDoFmt() and amiga.lib sprintf, etc.  I
  2556. thought about calling it Sprintf but I figure we might get them mixed up, I
  2557. couldn't really decide what to do about this...  Maybe we should call it
  2558. Tsprintf since it is only required for use with strings which are being
  2559. translated from 1 language to another.
  2560.  
  2561. #3: This new Tsprintf routine is simply an asm routine that calls
  2562. RawDoFmt() with a function parameter to store the chars in a buffer.  WHY
  2563. OH WHY doesn't RawDoFmt() default to sprintf string-storing when supplied
  2564. with a NULL function parameter?
  2565.  
  2566. This asm routine came straight out of the RKRM example listed under
  2567. RawDoFmt()
  2568.  
  2569. This should solve all the _current_ translation problems.  Other
  2570. translation problems will be dealt with later.
  2571.  
  2572. * I went through and added numeric positioning information to EVERY string
  2573.   that had more than 1 parameter.
  2574.  
  2575. * I basically copied the prototype from sprintf() in stdio.h to use as the
  2576.   prototype for Tsprintf().  Though first I compiled the game as a test
  2577.   with no prototype for Tsprintf() and no warnings or errors were generated!
  2578.   I assumed the game would just crash so I didn't try to play it like that
  2579.   till added the prototype and did smake clean smake.
  2580.  
  2581. =========================================================================
  2582. End Catalog Translation Problems
  2583. =========================================================================
  2584.  
  2585.  
  2586. --------------------------------------------------------------------
  2587. Begin Handling Translated Spellnames
  2588. --------------------------------------------------------------------
  2589.  
  2590. Decide how to handle spellnames?  Why not handle it exactly the same as I
  2591. handle Message(); ?  Yes, exactly like I handle Message, excellent.
  2592.  
  2593. Ok, but how do I read them in?
  2594. If I could somehow make a list of all English spellnames.  This is easy
  2595.  
  2596. duh.  I have a list of all English spellnames.  Its built into the game!
  2597. creature_name[]!!!!!!
  2598.  
  2599. IF (the date of the directory "SpellDescriptions/English" > the date of SpellDescriptions/EnglishSpellnames.txt) THEN
  2600.   just do "list SpellDescriptions/English/ quick files nohead >SpellDescriptions/EnglishSpellnames.txt"
  2601.   I now have a .txt file of all English spellnames.
  2602. END_IF  // ALL DONE NOW.  I just copied code from handling the sound effects.
  2603.  
  2604. Above paragraph is all useless!  I need French names of OBJECTS in the game,
  2605. not french names of english names.
  2606.  
  2607.  
  2608.  
  2609. Now go through each name in the this list and open up
  2610. that filename in each language/ dir and dig out the language/ version
  2611. of it and put it into an array!  Easy!  DONE.
  2612.  
  2613.  
  2614. * Make a CreatureName() macro that returns the creature_name of the
  2615.   creature in the currently selected language.  DONE.
  2616.  
  2617. * Go through the entire game and replace all appropriate occurrences of
  2618.   creature_name[x] with CreatureName(x) except the ones in editor.c.
  2619.   I'll worry about that later.  Certain occurrences of creature_name[x]
  2620.   specifically must NOT be replaced because they are dealing with files
  2621.   (sound files, text files, etc.) and those files must always be named
  2622.   according to their english name.  DONE.
  2623.  
  2624. Check the date of the LanguageSpellnames.txt against the date of the 
  2625. dir Language/  If the dir is newer then it means something has changed and
  2626. the text files must be rebuilt.  So if the Language/ dir is newer than the
  2627. LanguageSpellnames.txt file or the EnglishSpellnames.txt file or the
  2628. English/ dir then it must be rebuilt.  Additionally, if the English .txt
  2629. file  gets rebuilt then they must ALL get rebuilt because it might mean
  2630. some new spells have been added.
  2631.  
  2632. So in the end I'll end up
  2633. with a 350 line FrançaisSpellnames.txt
  2634. and  a 350 line MagyarSpellnames.txt
  2635. etc.
  2636.  
  2637. Line 1 is the translated name of object 1.
  2638. Line 2 is the translated name of object 2.
  2639. etc.
  2640.  
  2641. * PROBLEM: It takes several seconds to open/read/close the 350 files
  2642.   required to read in the translated spellnames. (And its only doing Français
  2643.   now!  That will be over a whole minute when all languages are done.)
  2644.   So I optimized it such that the list only needs to be rebuilt if someone
  2645.   has changed something in one of the descriptions.  NOW FIXED.
  2646.  
  2647. * TRANSLATED SPELLNAMES ARE NOW FULLY FUNCTIONAL.
  2648. --------------------------------------------------------------------
  2649. End Handling Translated Spellnames
  2650. --------------------------------------------------------------------
  2651.  
  2652. * Changed "Hungarian" -> "Magyar".
  2653.  
  2654. ----------------------------------------------------------------------
  2655. Email from Frédéric  "Frédéric's Folly" :)
  2656. ----------------------------------------------------------------------
  2657. Too bad my stupid screen grabber overwrote the screen grab I made earlier,
  2658. it was very impressive ! I played with 30 scrolls and my wizard appeared
  2659. next to a fir with combat on his spell list. With the help of a stone giant
  2660. I destroyed the tree and it revealed a Chaos lord spell !! I cast it then
  2661. replicated (with triple active) myself. I destroyed 4 generetors and 2 enemy
  2662. wizards in only one turn :-) !! I had to pick 6 spells among a big list, and
  2663. there was 1 Generator and 2 touch of God spells in it !  I was awesomely
  2664. powerful.
  2665.  
  2666. Then I made a stupid mistake. One of my replicates got burried by an orange
  2667. jelly. I rescued him but forgot he was only at half of his _initial_
  2668. strength. He got killed by a stone golem next turn. And it was my main
  2669. wizard so I lost.
  2670.  
  2671. One thing I don't understand is how it is decided which wizard is the
  2672. casting wizard. It seems to change each turn. Is it random ?
  2673.  
  2674. Reply from JC:  The spell description warns that casting Replicate on one's
  2675. own self can be very disorienting.  It means what it says. 8)
  2676.  
  2677. ----------------------------------------------------------------------
  2678. End Email from Frédéric
  2679. ----------------------------------------------------------------------
  2680.  
  2681. * June 13th, 2000: Received Patrick's 2nd registration from Ireland.  YAHOO!
  2682.   Compiled v2.83 and Emailed it to him on June 15th, 2000.
  2683.   
  2684.   The actual size is about 8.18 megs.
  2685.   The .lha archive size is about 5 megs and
  2686.   the email size is about 6.6 megs.
  2687.  
  2688. * June 17, 2000: Received Frédéric's registration.  He is now inducted as a
  2689.   junior member of Team Chaos and assumes all privileges and
  2690.   resposonsibilities associated therewith.
  2691.  
  2692.   He is also Chief Executive Vice President in Charge of Français
  2693.   Translation, Français Font Editing and also English and Français
  2694.   AmigaGuide Electronic Hypertext Documentation.
  2695.  
  2696. Saturday, June 17th, 2000: I loaded my very first IFF graphic file into the
  2697. game and displayed it.  AMAZING!  All these years I've never once loaded a
  2698. graphics file into one of my programs!  Though I have loaded IFF _sound_
  2699. files for many many years.
  2700.  
  2701. **********************************************************************
  2702. Bug Reports from Frédéric:
  2703. **********************************************************************
  2704.  
  2705. * Saving does not work ! I launched Chaos from the shell and got
  2706.   messages like
  2707.   c/lha: unknown option - 3
  2708.   each time the game tried to save the current game (either autosave or
  2709.   requested save).
  2710.  
  2711.   I've finally found why lha complains about the -3 option: it was in my
  2712.   ENV:LHAOPTS file, to automatically select the best compression algorythm.
  2713.   However, the old lha version supplied with chaos does not know of this
  2714.   option. The ideal solution would be that you use the -I option when you
  2715.   call lha from Chaos, this will cause lha to ignore the LHAOPTS environment
  2716.   variable.
  2717.  
  2718. JC: Ok, I changed lha to use -qaI when being called from Chaos.  NOW FIXED.
  2719.  
  2720.  JC>> * I tried to reactivate the lhaopts environment variable but the
  2721.  JC>> problem about -3 option arose again. Maybe you should put the -I
  2722.  JC>> option before all other options and alone on its dash.
  2723.  JC> Please try using the lha that is in chaos/c/ and figure out how to make
  2724.  JC> it work.
  2725.  JC> Just type it from the shell and try different options and settings
  2726.  JC> until it works properly. Then let me know which combination of things
  2727.  JC> worked and I'll put it in the program.
  2728.  
  2729. When I say "c/lha" I get "invalid option -3".
  2730.  
  2731. When I say "c/lha -I" I have the usage summary.
  2732.  
  2733. I said "c/lha -Ir a ram:ChaosTest.lha AmigaToPAL" and it worked.
  2734.  
  2735. I think the problem is that you mixed options and commands. -Iq are options,
  2736. a is a command "add", not to be mixed with the -a option (preserve file
  2737. attributes). So the following will work:
  2738.  
  2739. c/lha -qaI a xxxAutosave.lha ChaosSavedGame
  2740.  
  2741. (at least it should). Drat ! I tested it and it doesn't :-(
  2742.  
  2743. Okay, when I move -q aside it works:
  2744.  
  2745. c/lha -aI -q a xxxAutosave.lha ChaosSavedGame
  2746.  
  2747. JC: Ok I have now implemented the above line into the autosave code of the
  2748. game.  It doesn't work!  Lha keeps warning me that the "I" option must
  2749. appear immediately after a - and before the archive name!
  2750.  
  2751. c/lha -I -aq a xxxAutosave.lha ChaosSavedGame
  2752.  
  2753. NOW FIXED.
  2754.  
  2755.  
  2756. * I cast abduction and it abducted a poison dagger scroll ! And it did
  2757.   reveal itself as I was trying exploration mode :-)
  2758. JC: NOW FIXED
  2759.  
  2760.  
  2761. * The proportionnal font you use in the info screens does not know of
  2762.   accented letters !! This makes french descriptions for spells totally
  2763.   unreadable ! For example "Dévastation" becomes "Dvastation" !
  2764.  
  2765. JC: I know all about this.  You are in charge of translation so you are
  2766.       supposed to fix this.
  2767.  
  2768. NOW FIXED.
  2769.  
  2770.  
  2771. * The special combat ability provided by Aesculapius does not target
  2772.   anything ! I think special combat should have a default stat target even if
  2773.   the creature has no special combat at all (like range combat). Moreover
  2774.   this special combat targets my own creatures too !
  2775.  
  2776. JC: This was a simple problem of not enclosing my #define in ()
  2777.     NOW FIXED.  Aesculapius no longer gives people Special Combat.
  2778.  
  2779.  
  2780. * "Independent vulture eats some brown bear cadaver. Life +d"
  2781.   Seems the %d thing does not work.
  2782.  
  2783. JC: This is a problem with that stupid OS sprintf not working with long
  2784. parameters.  It only works with words!  It has already caused me many many
  2785. problems and this is the whole reason why it took me soooo long to do the
  2786. translation coding.  Anyway this particular sentence is NOW FIXED.
  2787.  
  2788.  
  2789. * I got this error message too:
  2790.   ChaosDigitalSoundSubProcess : erreur code 150
  2791.  
  2792. JC:  You can ignore this one.  All it means is that Chaos tried to play a
  2793. sound effect when there were no channels available (like when the music was
  2794. playing).  If music had been off at that moment, the sound would have
  2795. played.  The actual error message is generated by the OS and there is no way
  2796. for me to suppress it.
  2797.  
  2798.  
  2799. * I've found another minor bug: when I cast alternography and restart the
  2800.   game, the alternography is not reset and remains active.
  2801. JC: NOW FIXED
  2802.  
  2803. * "Asleep's wizard munches on some manticore's cadaver. Life +d." Asleep's
  2804.   wizard ??? This should not exist (it is not a fake wizard)! Moreover, asleep
  2805.   creatures should not eat anymore !
  2806. JC: Well, there was a bug whereby any scavenger that was asleep or dead or
  2807. a scroll would still scavenge any dead bodies that it was on top of.
  2808. NOW FIXED.
  2809.  
  2810.  
  2811. --------------------------------------------------------------------------
  2812. * Providing someone with a telescope does not increase his mapping of his
  2813.   own position in the world until he moves. Too bad if that creature is
  2814.   engaged. Maybe the telescope spell should update the explored cell for the
  2815.   recipient creature. This update should also happen when a creature blocking
  2816.   line of sight moves, revealing some parts of the world. Maybe a good place
  2817.   to do this is board update.
  2818.  
  2819. Reply from JC:
  2820. #1: Its a rule: if you are engaged then you can't map the world.  You are
  2821. too busy defending yourself to have time to draw maps.
  2822.  
  2823. #2:  Furthermore its a rule that if your creature doesn't move then it
  2824. doesn't map anything.  Thus, a creature that never moves will never map
  2825. anything.
  2826.  
  2827. #3:  I have been thinking of changing the Telescope and Seismology spells
  2828. such that they give results immediately upon casting.  Since you asked for
  2829. this I went ahead and implemented it.
  2830.  
  2831. So from now on if you cast Telescope or Seismology you will IMMEDIATELY (in
  2832. the casting phase) map new areas.
  2833. --------------------------------------------------------------------------
  2834.  
  2835.  
  2836. **********************************************************************
  2837. End Bug Reports from Frédéric.  (Is there ever an end? 8)
  2838. **********************************************************************
  2839.  
  2840.  
  2841. * FIXED description of Solar.
  2842.  
  2843. * CHANGED: Aesculapius scrolls are now always buried.
  2844.  
  2845. * CHANGED: Touch of God, Chaos Lord, Iridium Horse and Aesculapius scrolls
  2846.   are now only 1/3 as probable as other scrolls.
  2847.  
  2848.  
  2849. * END of Version 2.83
  2850. * BEGIN Version 2.84
  2851.  
  2852. * CHANGED Cartography to immediately explore the cells during the casting
  2853.   phase in the same way that I already changed Telescope and Seismology.
  2854.  
  2855. * INSTALLED the new ChaosCalligraphy.font which has been modified by
  2856.   Frédéric to include (all?) international characters of Western European
  2857.   alphabets.  Most notably ¿¡ñÑ éèêëæ ÉÈÊËÆ çÇ etc.
  2858.  
  2859. **********************************************************************
  2860. Bug Reports from Frédéric:
  2861. **********************************************************************
  2862.  
  2863. > * I cast betrayal on a bolter wall and it said the spell succeeded. But the
  2864. > bolter wall still belonged to the same player.
  2865.  
  2866. JC:  This has always been possible.  If Betrayal succeeds then a new player
  2867. is randomly chosen.  In your case it randomly chose the same player as
  2868. before.
  2869.  
  2870. I have now changed it so that if the spell succeeds then the target
  2871. _WILL_ change owners.  NOW FIXED.
  2872.  
  2873.  
  2874. > * Sometimes the old EndOfTurn sound is played at the end of a turn, instead
  2875. > of the sound from file "EndTurn.8svx". I did not find a condition for this
  2876. > to happen.
  2877.  
  2878. JC: This happened only when someone had previously cast Move It. 
  2879. NOW FIXED.
  2880.  
  2881. * When I begin a game in exploration mode (as player 1 or 8, never mind),
  2882.   the position of player 3 is shown to me before disappearing again. ?
  2883. JC: This one took me a while to figure out.  In the beginning of the game I
  2884. changed the PlayerView to 15 so that way absolutely nothing would be shown
  2885. since there is no player 15.  But the Team[] only has 12 elements! (0-11)
  2886. so Team[15] was actually accessing into TeamSettings[3] (which keeps a
  2887. backup copy of the team settings so that alliances and seperations don't
  2888. mess up the setup screen)  Of course TeamSettings[3] is going to equal 3
  2889. unless you change the Teams on the setup screen.  So the game thought that
  2890. player 15 was on Team 3 and thus would show you player 3's position at the
  2891. start of the game.
  2892.  
  2893. So how do I fix this?
  2894. A: Expand the Team[] and TeamSettings[] array.
  2895.    This requires a change to the savegame format and I would have to
  2896.    convert all the old levels to the new format.
  2897. B: I could just not change the view to be 15 at the beginning.  I could
  2898.    change it to the 1st human player, (since he will get the 1st real
  2899.    view anyway) or I could change it to the DEADP player.
  2900.  
  2901. Option B is easiest.  I will just change the view to the DEADP player.
  2902. This will work perfectly until the game starts randomly distributing dead
  2903. bodies across the map at the beginning of the game.  This will probably
  2904. never happen so it should never be an issue.  NOW FIXED
  2905.  
  2906.  
  2907. > * A question about something I wanted to test but I didn't have the right
  2908. > spells on my list. What does an inanimate object becomes when it has been
  2909. > hit by stone to flesh and reincarnate, and then dies ? Does the
  2910. > reincarnation scheme take this into account ?
  2911.  
  2912. JC: I tried this and it worked.  It said R=0 meaning that it doesn't
  2913. reincarnate into anything.  I then killed it and it died as usual.  Nothing
  2914. messed up, no crashes, my computer is still running.  8)
  2915.  
  2916.  
  2917. > * I cast the cat lord, and I had already a lion. I was able to control the
  2918. > lion and attack a harpy with it. Then, after I clicked end-of-turn, the cat
  2919. > lord controlled the lion and attacked the harpy again.
  2920.  
  2921. NOW FIXED.
  2922.  
  2923.  
  2924. > * My wizard has scavenge +4 but does not scavenge the harpy cadaver he's
  2925. > standing on (autosave 020p8). Ah ! I see. Scavengerism is only for
  2926. > creatures with a life force below its initial value, right ?
  2927.  
  2928. Correct.
  2929.  
  2930.  
  2931. > * Another wizard has scavengerism and it works. But he's cloaked and the
  2932. > sentence say he is a wizard munching on some brown bear carcass. I think it
  2933. > should say "cloaked creature" instead of wizard.
  2934.  
  2935. NOW FIXED.
  2936.  
  2937.  
  2938. > * A leopard corpse mewed when it was destroyed by a fireball ! Corpses
  2939. > really shouldn't make any sound :-)
  2940.  
  2941. NOW FIXED.
  2942.  
  2943.  
  2944. > * I'm able to control the solar and make it attack before it attacks on his
  2945. > own !
  2946.  
  2947. NOW FIXED.
  2948.  
  2949. ========================================================================
  2950. BEGIN HORRIBLE LOCKUP BUG WITH "Repulsion" sound.
  2951. ========================================================================
  2952. * Sometimes the game locks up and makes the Repulsion sound.
  2953.  
  2954. JC: This same bug was reported by JJ several times over the last few months
  2955.     but the details were so sketchy that I had no way to track it down and
  2956.     fix it.
  2957.     10 days later after countless hours of playtesting by Frédéric using
  2958.     the JC modified version of Chaos which generates logfiles of its
  2959.     actions, I was _finally_ able to track down this horrible bug!!
  2960.  
  2961.  
  2962. // Begin code copied from CellEffect();
  2963.   case TELEPORTIN:
  2964.      ObtainSemaphore (&BoardLock);
  2965.      FOR (i = 0; i < 8; i++) DO
  2966.         IF (i != 7) THEN
  2967.            SetAPen (rastPort, WHITE);
  2968.            Move (rastPort, x + i, y + i);
  2969.            IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + i);
  2970.            AUDIONote (2000 - i * 100);
  2971.            IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + CellHeight - i);
  2972.            AUDIONote (1000 + i * 100);
  2973.            IF (DrawIt) Draw (rastPort, x + i, y + CellHeight - i);
  2974.            AUDIONote (2000 - i * 100);
  2975.            IF (DrawIt) Draw (rastPort, x + i, y + i);
  2976.            AUDIONote (1000 + i * 100);
  2977.         END_IF
  2978.         IF (i != 0) THEN
  2979.            SetAPen (rastPort, BLACK);
  2980.            Move (rastPort, x + --i, y + i);
  2981.            IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + i);
  2982.            IF (DrawIt) Draw (rastPort, x + CellWidth - i, y + CellHeight - i);
  2983.            IF (DrawIt) Draw (rastPort, x + i, y + CellHeight - i);
  2984.            IF (DrawIt) Draw (rastPort, x + i, y + i++);
  2985.         END_IF
  2986.      NEXT // i++
  2987.      ReleaseSemaphore (&BoardLock);
  2988.      break;
  2989. // End code copied from CellEffect();
  2990.  
  2991. Notice that it always decrements i (i--) but it only SOMETIMES
  2992. reincrements it (i++)
  2993.  
  2994. As i happens to be the loop control variable, decrementing it once per loop
  2995. = an infinite loop!
  2996.  
  2997. I spent hours looking through the code for constructs like this!!!!
  2998. I SPECIFICALLY looked for ANY FOR NEXT loops in which the loop control
  2999. variable was changed via i++, i--, --i, ++i, or i+=x or i-=x.  But I didn't
  3000. look in cell.c because I thought the problem was either in chaos.c where
  3001. the recovery code is or in core.c where tons of low-level routines are at
  3002. that get called millions of times by chaos.c.
  3003.  
  3004. NOW FIXED.
  3005.  
  3006. What the actual bug was:
  3007. Basic Explanation: Anything that caused the TELEPORTIN or TELEPORTOUT cell
  3008. effects to be used would lock up in an infinite loop making sound.  Since a
  3009. simple sound played in a loop is what the "Repulsion" sound is, this sounds
  3010. very similar to the Repulsion spell sound.
  3011.  
  3012. Specific Explanation:
  3013. IF you were playing in exploration mode and any of the following things
  3014. happened then the game would lock up.
  3015. A) A roper teleported to a new location.
  3016. B) A creature changed sides due to impurities.
  3017. C) Any Wizard used the Passage spell.
  3018. D) Any Wizard used the Teleport spell.
  3019. E) Any wizard cast Pyrotechnics or Storm and it actually hit a creature.
  3020. F) Any Haunt spontaneously changed sides.
  3021. G) Any Wizard cast the Pox spell on something.
  3022.  
  3023. NOW FIXED!!!
  3024.  
  3025. So the reason the lockup bug seemed to only happen when you played with
  3026. lots of enemy wizards and with growths on the screen was because, the more
  3027. stuff on the board, the more of a chance of Impurities causing an alleigance
  3028. change.
  3029.  
  3030. ========================================================================
  3031. END HORRIBLE LOCKUP BUG WITH "Repulsion" sound.
  3032. ========================================================================
  3033.  
  3034. * BUG: When I'm in alliance with another wizard, I can see the regions he
  3035.   has explored. However, when a creature is moving in these regions, it
  3036.   is not highlighted.
  3037. JC: This bug was a simple typographical error in the code.  NOW FIXED.
  3038.  
  3039.  
  3040. > * About the bug in inamorphobiosis you fixed. I thought the same problem
  3041. > could arise when a wizard mounts a cat (lion, jaguar etc) thanks to "Mount"
  3042. > and another player casts the cat lord. Did you consider this case ?
  3043.  
  3044. JC: I just changed it so that Cat Lords cannot take control of mounted cats.
  3045.     NOW FIXED.
  3046.  
  3047.  
  3048. > * After Joker, I got "Wizard 7" on my list ! Is this normal ?
  3049.  
  3050. JC: Well, the way Sean programmed it, it could give you any spell, even spells
  3051. with 0 probability.  I have now changed it so that it will not give you
  3052. spells of 0 probability.  NOW FIXED.
  3053.  
  3054. You also reported months ago that you were able to get a Radioactive Land
  3055. spell on your list by casting Joker in v2.5.  This was a symptom of the
  3056. exact same bug and is also NOW FIXED.
  3057.  
  3058.  
  3059. > * I had triple in effect and my marid cast violet fungi. It logically cast
  3060. > it three times, but all at the same place, one on another. This should be
  3061. > considered stupid !
  3062.  
  3063. JC: NOW FIXED.
  3064.  
  3065.  
  3066. > * I first got Burstroem's Browser today. I cast it and began to peek at
  3067. > other wizards spell lists. When I play with Texas Trash'em, I can peek at
  3068. > others spell list when I have already picked a spell to cast and the game
  3069. > is waiting for me to discard another one. However, when I get back to my
  3070. > list, the spell I had picked to cast is displayed again.
  3071.  
  3072. JC: NOW FIXED.
  3073.  
  3074.  
  3075. > * When a growth is hit with "No grow", it becomes inanimate, so the
  3076. > animation should be stopped.
  3077.  
  3078. JC: NOW FIXED.
  3079.  
  3080. **********************************************************************
  3081. End Bug Reports from Frédéric.  (Is there ever an end? 8)
  3082. **********************************************************************
  3083.  
  3084. * CHANGED: Each Wizard now has a unique name!  Instead of 8 creatures with
  3085.   the name "Wizard", we now have "Wizard 1", "Wizard 2" etc.  This was
  3086.   neccessary so that each wizard can have its own unique sound files and
  3087.   graphic files.
  3088.  
  3089. * BUG: A scroll of a Cat Lord takes control of the cats and makes them
  3090.   belong to NOBODY!  NOW FIXED.
  3091.  
  3092. * CHANGED: Inanimage is now only half as likely to cast Inanimorphobiosis
  3093.   or Mass Petrification as he is likely to cast any of his other spells.
  3094.  
  3095. Sent new version of 2.84 to Frédéric for playtesting on July 5, 2000.
  3096.  
  3097. * CHANGED Ghoul: The description of the Ghoul says that it feeds on others
  3098.   so I have now changed it so that it has Exophagy and +2 Scavenging as per
  3099.   Frédéric's request.
  3100.  
  3101.  
  3102. **********************************************************************
  3103. Double-Attacking Bug Reports from Frédéric:
  3104. **********************************************************************
  3105.  
  3106. >>> * A floating eye belonging to one of my computer allies was hit by
  3107. >>> singular earthbind. It moved close to an enemy and attacked it... two
  3108. >>> times !
  3109.  
  3110. > * The ghoul in cell (3,3) attacked the independent generator twice !!! This
  3111. > is the first time I see this ! Autosaves 27 and 28. It did it again on turn
  3112. > 28 !
  3113.  
  3114. > * Another ghoul, in the upperright corner, attacked the adjacent ogre
  3115. > assassin twice ! Autosaves 39 and 40. It just killed the ogre now and got
  3116. > back to its original place. So it really gets two chances to move!
  3117.  
  3118. Yes quite right.  Any nonengaged computer-controlled creature with >10
  3119. movement points could move twice!  NOW FIXED.
  3120.  
  3121. **********************************************************************
  3122. End Double-Attacking Bug Reports from Frédéric.
  3123. **********************************************************************
  3124.  
  3125. * BUG: Independent creatures and the creatures of computer-controlled
  3126.   wizards get to move and/or attack twice if they have more than 10
  3127.   movement points and are not engaged.  NOW FIXED.
  3128.  
  3129. * BUG: Independent creatures and the creatures of computer-controlled
  3130.   wizards accrue approximately .24 free movement points for each diagonal
  3131.   movement made.  NOW FIXED.
  3132.  
  3133. * BUG: A computer-controlled wizard who is mounted on an inanimate object
  3134.   (such as a centaur that has been hit with Flesh to Stone) can still
  3135.   attack and shoot if the centaur is "engaged".  NOW FIXED
  3136.  
  3137. * BUG: Animate affects scrolls of inanimate objects!  NOW FIXED!
  3138.  
  3139. **********************************************************************
  3140. Bug Reports from Frédéric.
  3141. **********************************************************************
  3142.  
  3143. > * I cast "no grow" on my own gooey blob so that I get many creatures when I
  3144. > subsequently cast "animate". However, it didn't work: I still have my
  3145. > petrified gooey blob. We should either: say the spell only works for trees,
  3146. > or make it affect more inanimate objects (including those petrified by
  3147. > flesh to stone, for example make them creatures again).
  3148.  
  3149. JC: I changed it so that now Animate affects petrified growths.  NOW FIXED.
  3150.     Also it didn't affect Ropers.  Now it does.
  3151.  
  3152.  
  3153. > * When the mount of a wizard is killed, it leaves no corpse behind.
  3154. JC: NOW FIXED.
  3155.  
  3156.  
  3157. > * When a creature kills a growth covering a scroll, it does not move over
  3158. >   the scroll.
  3159. JC: NOW FIXED.
  3160.  
  3161.  
  3162. > * Desire: on the second setup screen, add the GFLG_TABCYCLE (cf
  3163. > Intuition/Intuition.h) to the string gadgets so that one can move between
  3164. > all the string gadgets without using the mouse.
  3165.  
  3166. JC: DONE.  I also implemented it on the 1st setup screen.
  3167.     TABCYCLE feature added in honor of Frédéric Delacroix, who earned the
  3168.     "Playtester of the Month Award" for June 2000.
  3169.  
  3170.  
  3171. > * Suggestion: Convert could be cast on the inanimate so that it can be used
  3172. > to destroy dark wood. (An enemy of mine is an arborist and cast a line of
  3173. > dark woods close to me).
  3174.  
  3175. JC: DONE.
  3176.     Convert spell description updated.
  3177.  
  3178.  
  3179. > * There is an independent solar but it never moves or attack !
  3180.  
  3181. JC: NOW FIXED. Tested and works perfectly.
  3182.  
  3183.  
  3184. **********************************************************************
  3185. End Bug Reports from Frédéric.  (Is there ever an end? 8)
  3186. **********************************************************************
  3187.  
  3188. ----------------------------------------------------------------------
  3189. - Begin Font Bugs!
  3190. ----------------------------------------------------------------------
  3191. Font in start/quit gadgets is wrong. It is using a system default font.
  3192. Font in Menus is wrong.  It is using a system default font.
  3193. Font inside the filerequester is wrong.  It is using a system default font.
  3194. Font in text gadgets on setup 1 is Topaz!
  3195.  
  3196. If the system default font is really HUGE, as it might be on an Amiga with
  3197. a 1600x1280 gfx card, then the gadgets are really messed up and the menus
  3198. look HORRIBLE and the menus corrupt the screen gfx.  The gadgets and menus
  3199. are programmed to ask for an 8 point font and they expect to get it.  If
  3200. the font is not 8 points then bad things can happen.
  3201.  
  3202. Ok I just added the following line to the OpenScreenTagList() of the main
  3203. screen:
  3204.   SA_Font,&PearlFont8textAttr,
  3205.  
  3206. THIS DID NOT FIX THE BUG!
  3207.  
  3208. I have now tried multiple other ideas.  None of them had any effect
  3209. whatsoever. :(
  3210.  
  3211. I conducted various experiments and had no luck whatsoever.  So then I
  3212. spend the rest of the day discussing this problem with various Amiga
  3213. Programmers and _FINALLY_ Drad figured out the problem and conducted some
  3214. experiments to prove what was going on.
  3215.  
  3216. 1. OpenDiskFont() can handle, and really should have, a complete pathname
  3217.    in the TextAttr struct. "ChaosGame:fonts/pearl.font" works perfectly.
  3218.  
  3219. 2. But when using that VERY same TextAttr struct in a menu or a gadget, it
  3220.    will fail 100% of the time due to a "bug" or "improperly documented
  3221.    feature" of Intuition.  When supplying TextAttr's to ANY intuition
  3222.    function, there MUST be NO pathname component whatsoever!  And the font
  3223.    MUST exist in memory!  Only the actual name of the font may be supplied.
  3224.  
  3225. So the solution is to have a PearlFont8TextAttrForOpenDiskFont that says
  3226. "ChaosGame:fonts/pearl.font"  and a seperate PearlFont8TextAttrForIntuition
  3227. that says "pearl.font".
  3228.  
  3229. NOW FIXED.
  3230.  
  3231. ----------------------------------------------------------------------
  3232. - End Font Bugs!
  3233. ----------------------------------------------------------------------
  3234.  
  3235. Sent yet another new version of v2.84 to Frédéric for playtesting on 
  3236. July 12th, 2000.  It took approx 41 minutes to compile on my 25Mhz 030.
  3237.  
  3238.  
  3239. **********************************************************************
  3240. Bug Reports from Frédéric.
  3241. **********************************************************************
  3242.  
  3243. > * It seems to me that growths eventually stop growing, sometimes after a
  3244. > single turn.
  3245.  
  3246. JC: NOW FIXED.
  3247.  
  3248.  
  3249. > I have noticed very recently
  3250. > (between 2.83 and 2.84) that some growths tend to stop growing very rapidly.
  3251. > I once cast an orange jelly and it never grew at all !
  3252.  
  3253. JC: NOW FIXED.
  3254.  
  3255.  
  3256. > Sometimes Hippocrates or Aesculapius randomly kills one of my creatures
  3257. > with his healing Special Combat.
  3258.  
  3259. JC: I finally figured this out!  It happened randomly because it was caused
  3260.  by the Impurities code!  Here is the offending line of code:
  3261.  
  3262.   IF (Impurities and MSGRandom() % 800 < 2 and !isExposedWizard(defence)) combat=50;
  3263.  
  3264. I rewrote it thusly:
  3265.   IF (Impurities and MSGRandom() % 800 < 2 and !isExposedWizard(defence)) THEN
  3266.      IF (combat >=0) THEN 
  3267.         combat=50;
  3268.      ELSE
  3269.         combat=-50;
  3270.      END_IF
  3271.   END_IF
  3272.  
  3273. So the real bug was:
  3274. * BUG: With Impurities turned on, healing special combat sometimes kills
  3275.   the creature being healed!  NOW FIXED!
  3276.  
  3277. > * When a creature raised from the dead is covered by a growth and then
  3278. > uncovered, it is living again ! 
  3279.  
  3280. This is according to the rules of Chaos.  If you search the docs for
  3281. "covered by a growth" you will see the rules pertaining to this matter.
  3282.  
  3283. > This is not normal !
  3284.  
  3285. Being undead is not normal!
  3286.  
  3287. If you don't want this to happen then you _must_ kill the growth yourself
  3288. before it dies of natural causes!
  3289.  
  3290.  
  3291. > * When a cloaked wizard who as scavengerism is scavenging a corpse, it says
  3292. > "Wizard 4 munches on a corpse of cloaked creature" !
  3293.  
  3294. This was a simple matter where I switched my variables. NOW FIXED.
  3295.  
  3296.  
  3297. > * Sometimes when a wizard is "killed" by justice/vengeance/exorcise in an
  3298. > unexplored region and is reinstated, his position is revealed (the cell he's
  3299. > in becomes empty for the duration of the "bonus spell" sound).
  3300.  
  3301. This was a bug whereby DrawCell(&NothingImage,cell); was being used instead
  3302. of the correct ReDrawCell(cell);
  3303. DrawCell() just blindly draws graphics into cells without taking into
  3304. account exploration mode.
  3305. ReDrawCell() knows about exploration mode and acts accordingly.
  3306. NOW FIXED.
  3307.  
  3308.  
  3309. > * The wizard that wouldn't die bug:
  3310. > Wizard 5 has 1 life point and -2 recovery. Each time he's attacked, it dies
  3311. > (allelujah sound, but no wizard dying sound). The cell is left blank but the
  3312. > wizard is still there if I move the mouse pointer over it. It can be
  3313. > attacked again and the same happens. The cell is eventually refreshed and
  3314. > the wizard reappears. I think he cast Lich lord during his first life but
  3315. > the lich lord icon is not in the list of his powerups now. He was killed at
  3316. > least 15 times by the independents !
  3317. > Autosaves 15,16,17.
  3318.  
  3319. Ok, this had nothing to do with Lich Lord.  This was caused by the fact
  3320. that the wizard had cast Horror on himself.  Each time he was killed the
  3321. Horror code kicked in and tried to replicate him, but there were no empty
  3322. adjacent cells.  So he wasn't actually replicated and the Horror was not
  3323. actually used up and he didn't actually die.
  3324.  
  3325. I have now changed it such that:
  3326. 1) If this happens again, the Horror gets used up.  So it will only happen
  3327.    once.
  3328. 2) It now prints a text message and does a graphical effect to indicate
  3329.    that the Horror process is happening.
  3330. 3) It sets Life, Magic Resistance, Intelligence, Manuverability and Combat
  3331.    to maximum.  Move gets set to max(CurrentMove,InitialMove). This is to
  3332.    make up for the fact that it didn't get to replicate.
  3333.  
  3334. NOW FIXED.  Tested and works ok.
  3335.  
  3336.  
  3337. > * ????!? The wizard that wouldn't die died on turn 18 ! It was during
  3338. > boardupdate so I guess the giant rat bite did it.
  3339.  
  3340. The wizard who wouldn't die after being attacked multiple times by green
  3341. and golden dragons + tons of other creatures ended up dying by a simple rat
  3342. bite.
  3343.  
  3344.  
  3345. > * When the independents (but it may also happen for other teams, I don't
  3346. > know) kill a wizard, the word "Independents" at the bottom of the screen is
  3347. > erased just after the dying-wizard animation, and the movement phase
  3348. > continues without "Independents" to be reprinted.
  3349.  
  3350. NOW FIXED.
  3351.  
  3352.  
  3353. > * An evil wizard cast meddle but the following creatures were not affected:
  3354. > The exorcist, earth elemental. Is it because they have no reincarnation ?
  3355.  
  3356. Yes.
  3357.  
  3358. > Why wouldn't the exorcist reincarnate into a bandit or an orc ?
  3359.  
  3360. He was set to not reincarnate into anything.
  3361. I have now changed The Exorcist so that he reincarnates into a good little
  3362. Halfling.
  3363.  
  3364.  
  3365. > * A wizard destroyed a white dragon corpse with a magic bolt and the dragon
  3366. > cried ! It's an old bug you told me was allegedly fixed :-)
  3367.  
  3368. OOPS!  I put the "and !isDead(b) and !isScroll(b)" code on 1 of the lines
  3369. that needed it but I forgot to put it on the other line that needed it!
  3370. doh!  NOW FIXED.
  3371.  
  3372.  
  3373. > * The game ended as I killed the last piece of independent earthquake.
  3374. > However, there was still a bird lord alive belonging to a dead player
  3375. > (product of impurities).
  3376.  
  3377. With impurities, you can win the game in an impure manner 8)
  3378.  
  3379. Creatures that belong to dead players are no threat to you whatsoever so
  3380. there is no need to kill them.
  3381.  
  3382. **********************************************************************
  3383. End Bug Reports from Frédéric.  (Is there ever an end? 8)
  3384. **********************************************************************
  3385.  
  3386. * Score Screen has now been translated into Français.  I added in a teensy
  3387.   amount of code for stringwidth sensitivity so that the screen looks good in
  3388.   English and Français.  I'll probably have to add more code when the game is
  3389.   translated to other languages.  I only added in the bare minimum amount
  3390.   to make the Français score screen look good.
  3391.  
  3392. * SMALL BUGS: Microscopically small even 8)   The following spells would,
  3393.   in exploration mode, reveal the position of the target for a brief
  3394.   instant by drawing a blank image in the target cell.
  3395.   However, this blank image was immediately redrawn properly.
  3396.   Apparently nobody ever noticed this small flaw.
  3397.  
  3398.   It affected the following spells:
  3399.   Armour, Brain Boost, Cloak, Combat, Cursed Sword, Magic Shield,
  3400.   Meteor Storm, Recover Boost, Restoration, Sword of Sassenrath,
  3401.   Scavengerism and Exophagy.  NOW FIXED.
  3402.  
  3403. * ALL appropriate occurrences of DrawCell() have now been replaced with
  3404.   ReDrawCell()  I systematically went through the entire program and did
  3405.   this.  DONE.
  3406.  
  3407. * 1st and 2nd Spell Information Panels have now been 100% translated into
  3408.   Français.
  3409.  
  3410. * Replaced all appropriate occurrences of player_name[x] with
  3411.   PlayerName(x) in the entire program + coded the PlayerName() routine to
  3412.   handle the multilingual translation issues.  This took 1 hour.
  3413.  
  3414. * Sent Frédéric version 2.85 for testing/translating on July 19th, 2000.
  3415.  
  3416. * Sent JKD version 2.85d for OS 3.5 + MagicMenu + P96 + CyberGraphx
  3417.   testing.  He reports that Chaos works perfectly on all systems!
  3418.  
  3419. -------------------------------------------------------------------------
  3420.                       CODE REDUCTION UPGRADE
  3421.  
  3422. There are tons of no-longer-used routines in info.c.  These were originally
  3423. used for the old 640x256 information panels.  The code was still in the
  3424. game and active so that I could switch between the old way and the new
  3425. hires way any time I wanted.  However, I never actually did that.
  3426. And now the old code is seriously out of synch with the new way of doing
  3427. things so I am finally eliminating it all.
  3428.  
  3429.  
  3430. Eliminated 1252 lines of code from info.c
  3431. Info.c 155488 -> 103018  SAVED: 52470 bytes of source code.
  3432. Chaos  433540 -> 420040  SAVED: 13500 bytes off the release version of the
  3433. Chaos executable.
  3434.  
  3435. All the code that I removed has been saved in SC:UnusedInfo.c in case I
  3436. need to reference it for some strange reason.  Which I seriously doubt I
  3437. ever will.
  3438.  
  3439. ---------------------------------------------------------------------------
  3440.  
  3441. * TEST lzx vs lha
  3442.   I archived a complete demo distribution of the game
  3443.   lzx: 4942881 bytes.
  3444.   lha: 5298980 bytes.
  3445. SAVED:  356099 bytes.
  3446.  
  3447. * Sent Xav version 2.85 for playtesting on July 20th, 2000.
  3448.  
  3449. BEGIN: version 2.86
  3450. * Replaced EndTurn.8svx with Frédéric's EndTurn.8svx because nobody liked
  3451.   the old end turn sound.  I renamed the old EndTurn.8svx to MaxCombat.8svx
  3452.   and changed the game code to play this sound anytime anyone casts a spell
  3453.   that makes a creature have maximum combat.  This means the following spells:
  3454.   Combat, Touch of God, Chaos Lord.
  3455.  
  3456.  
  3457. -------------------------------------------------------------------------
  3458.  Translation of IP1 (Information Panel 1) Creature Statistics Screen
  3459.  to: Français.
  3460.  
  3461. * Scavenge translates to Charognardise which is _entirely_ too long.
  3462.   So I'm leaving this in English.  Someday when we make the AGA version
  3463.   this can be changed to the "Scavengerism" spell icon, which looks quite
  3464.   nice.
  3465.  
  3466. Magic Resistance translates to Résistance magique which is too long.
  3467. Résistance magique -> Résist. magique
  3468.  
  3469. Ranged Combat translates to Combat à distance which is too long.
  3470.  
  3471. > Ok, so how should the info panel look?
  3472. >
  3473. > Option A:
  3474. > Combat
  3475. > Tirer
  3476. > Combat spécial
  3477. >
  3478. > Option B:
  3479. > Combat
  3480. >   à distance
  3481. > Combat spécial
  3482. >
  3483. > Option C:
  3484. > Combat
  3485. > ... à distance
  3486. > Combat spécial
  3487. >
  3488. > Option D:
  3489. > Combat
  3490. > Combat de loin
  3491. > Combat spécial
  3492.  
  3493. Xav: Option A is the good one.
  3494.  
  3495. JC: Option A implemented.
  3496.  
  3497.  END Translation of IP1 (Information Panel 1) Creature Statistics Screen
  3498.  to: Français.
  3499. -------------------------------------------------------------------------
  3500.  
  3501. * Reduced the amount of time that the horrible looking circular pattern is
  3502.   displayed on the lissa-box requester things.  Reduced it to 1/3 of its old
  3503.   value.
  3504.  
  3505. * ADDED Multingual talklists code so that now the game can use talklists of
  3506.   any supported language.
  3507.  
  3508. * The dir structure of certain things in Chaos has now changed.  The
  3509.   Screens/ dir and TalkListsDir/ have changed.  So any further updates issued
  3510.   need to be COMPLETE updates, not just the executable file.
  3511.   Possibly other things in the dir structure or file structure have changed
  3512.   also.
  3513.  
  3514. * FLAW: Touch of God and Chaos Lord do not do any sort of graphical effect!
  3515.   So you cannot tell who it is being cast on!  NOW FIXED.
  3516.  
  3517. * Improved CellEffect() with better sound file handling.
  3518.  
  3519. * PROBLEM: The req.library filerequester is optimized for use on
  3520.   non-interleaved bitmaps.  This means the scrolling sucks bigtime on the
  3521.   chaos interleaved bitmaps.  It colorflashes horribly.  It goes from having
  3522.   the best scrolling of any filerequester to suddenly having the worst
  3523.   scrolling of any filerequester.  So I opened up yet another new screen.
  3524.   This one is just like the old HiResScreen only it is noninterleaved.
  3525.   Now the scrolling looks fast and smooth again!  NOW FIXED.
  3526.  
  3527. * LOAD/SAVE screens now have smooth scrolling once again.
  3528.  
  3529. END of version 2.86
  3530.  
  3531. * Copied the entire gamedir over to Chaos_2.9/ so that I may now begin work
  3532.   on the Enhanced Graphics Version on Tuesday, July 25th, 2000.
  3533.  
  3534. * Fixed Passage description.
  3535.  
  3536. * July 25, 2000: The size of the release executable file "chaos" is
  3537.   421048 bytes.
  3538.  
  3539. *************************************************************************
  3540. *      BEGIN  ENHANCED GRAPHICS VERSION  V 2.9  July 25, 2000           *
  3541. *************************************************************************
  3542.  
  3543.  
  3544. I have written a new graphics system that uses standard iff pictures to
  3545. describe how monsters and magic spells and all other objects in the game 
  3546. look.
  3547.  
  3548. Each object in the game has its own 320x256 64 color EHB mode iff file.
  3549.  
  3550. The name of the file is, and must be, the exact name of the object in
  3551. English.  The spaces must be there so don't try to rename them.
  3552. All the files are already included with the proper name in gfx/Spells/
  3553. so you don't need to worry about this.
  3554.  
  3555. All you have to do is edit any of the files you want and they will
  3556. automagically get included into the game.  Unless for some reason the clock
  3557. in your Amiga is broken.  In which case you may have to type in the shell:
  3558. delete gfx/dat/#?
  3559. That will delete the graphics index files and force the game to rebuild
  3560. them from scratch.  It takes a full minute to rebuild all the tiles from
  3561. scratch because it must open and close 350 files + read in 350 files +
  3562. decompress 350 files + cut and paste 731 tiles, check for blank frames,
  3563. etc.  These numbers are only accurate as of July 25th, 2000.  The numbers
  3564. will be much larger in the future.
  3565.  
  3566. If you change any graphic file then the next time you start the game, it
  3567. will notice that you have changed something and will rebuild the tile
  3568. indexes.  This will take a full minute or more.
  3569.  
  3570. Selecting "New Game" from the menu is currently not sufficient to reload
  3571. the tiles.  You must completely quit the game (exit to DOS or WorkBench).
  3572. Then reload the game and all will be well. 8)
  3573.  
  3574. The old 3 frame animation limitation has been ERADICATED.  You may now draw
  3575. or render as many frames as you like.
  3576.  
  3577. The old 32-color limitation has been ERADICATED.  I couldn't think of any
  3578. conceivable reason why any strategy game should be limited to 32 colors.
  3579. All Amigas support 64 colors or more so we are going to use them.
  3580.  
  3581.  
  3582. Ye Olde Rules for GrafixMages:
  3583. ==============================
  3584.  
  3585. 0. The first 31 pixels at the top of the screen are ignored.
  3586. 1. All Living Creatures _MUST_ have a dead image!  (Even if you just cut &
  3587.    paste in an image of a dead orc.)  The leftmost tile is reserved for
  3588.    the dead image and only the dead image.
  3589. 2. All Inanimate Objects and Growths and Undeads must _NOT_ have a dead
  3590.    image.  Its dead image space should be blank.
  3591. 3. You may have as many frames of animation as you like.  Ping-Pong
  3592.    and continuous looping playback are both currently supported.
  3593. 4. In order to specify that you want your animation played in looping mode
  3594.    you must change the purple line at line 32 to be color #1.  This tells
  3595.    the game to play this animation in a continuous loop.
  3596. 5. The animation frames are terminated by the first completely blank frame.
  3597. 6. The image must use the supplied palette.  If you rearrange the palette
  3598.    for artistic reasons then you _MUST_ rearrange it back to its original
  3599.    state before saving the file.  Failure to do this will result in
  3600.    wrong-looking graphics.
  3601. 7. If you want to leave extra grafix on the screen that you are working on
  3602.    then that's ok.  They will be ignored.  Only the tiles up to the first
  3603.    blank tile are processed by the game.  Any extra gfx at the bottom of the
  3604.    screen are ignored.
  3605.  
  3606.  
  3607. ----------------------------------------------------------------------------
  3608.  
  3609. * BUG: When playing in exploration mode, if you try to examine an
  3610.   unexplored cell and the cell has a scroll in it then it lets you read
  3611.   the scroll!  NOW FIXED.
  3612.  
  3613. * BUG: Joseph Conwell reports that he cast Sword of Sassenrath on his Orc
  3614.   and then when it promoted to Mighty Orc it lost its Sword of Sassenrath.
  3615.   JC: This is because it promotes to whichever stat is bigger.  0 > -1 so
  3616.       it makes sense.  However I have now hacked in some extra code so that
  3617.       if you posess negative special combat then it will be promoted to
  3618.       whichever stat has the greatest absolute value.  NOW FIXED.
  3619.  
  3620. 1. Write and test code to read in all the tiles from IFF files. DONE.
  3621. 2. Load new color palette. DONE.
  3622. 3. Rewrite ColorCycler.  DONE.
  3623. 4. Redefine all #defined colors to new values.  DONE.
  3624. 5. Rewrite ReDrawCell() to use the new multiframe-capable form.  DONE.
  3625.  
  3626. 6. Totally rewrite the animator task to handle the new tiledata + keep
  3627.    track of the multiple framecount stuff and which direction it is going
  3628.    through the animation in.
  3629.    Animator tasks needs the following variables:
  3630.    1. WORD FrameCount so it knows what frame it is on.
  3631.    2. WORD AnimationDirection. 1=Forwards, -1=Backwards. (for ping pong playback)
  3632.            0=stopped.
  3633.    3. BYTE PlayBackType 0=PingPong. 1=ContinuousLoop.
  3634.    ALL DONE.
  3635.  
  3636. 7. Rewrite sm.c to handle new variables:
  3637.    sm.c FrameCount will ALWAYS be set to 1
  3638.    sm.c AnimationDirection will ALWAYS be set to 1.
  3639.    ALL DONE.
  3640.  
  3641. 8. Edited Meteor Storm spell to work with new system. DONE.
  3642. 9. Rewrite the entire game to use the new system. DONE.
  3643.  
  3644. 10. Eliminate all old references to the old hardcoded cimage1[], cimage2[]
  3645.     and cimage3[] arrays which limited the game to 3 frames of animation.
  3646.     DONE.
  3647.  
  3648. 11. Eliminate all old references to DeadImages[] array. DONE.
  3649.  
  3650. 12. Added the code to support loading files with CONTINUOUSLOOPing anims.
  3651.     Just change the color of the first line to #1 and the anim will play in
  3652.     looping mode.  DONE.
  3653.  
  3654. 13. Hack in code to write out all those hardcoded cell effects gfx and
  3655.     color convert them to the new palette and store them as IFFs in the
  3656.     gfx/CellEffects/ dir.  DONE.
  3657.  
  3658. 14. Write code to read in the IFF CellEffects. DONE.
  3659. 15. Rewrite CellEffect() to use the new IFF gfx.  DONE.
  3660. 16. Rewrite BoardEffect() to use the new IFF gfx. DONE.
  3661. 17. Remove all hardcoded explosions and magical effects graphics. DONE.
  3662. 18. Don't load the old graphics file "chaos.dat" anymore. DONE.
  3663. 19. REMOVE all graphics handling from sm.c. DONE.
  3664.  
  3665. 20. Edit all 349 spell files and remove all spell-descriptions and imagery.
  3666.     Remove all Description: info and Imagery: info and Image: info.  DONE.
  3667.  
  3668. 21. Edit sm.c to remove all code related to reading/processing/including
  3669.     image files into the compilation process. DONE.
  3670.  
  3671. 22. Edit sm.c to remove all code related to reading/processing/including
  3672.     spell descriptions into the compliation process.
  3673.     Comment out or delete everything to do with spell descriptions.
  3674.     DONE.
  3675.  
  3676. 23. There are several programs that are being compiled by the makefile in
  3677.     order to make the old compressed spell descriptions file "pool.ssc"
  3678.     Eliminate them.  DONE.
  3679.  
  3680.     Now that I've eliminated all that stuff from the makefile
  3681.     (spell descriptions, text compression encoding & decoding routines)
  3682.     + all that stuff from the spell manager (description processing and
  3683.     image processing)  a smake clean smake developer version now takes only
  3684.     11.5 minutes on my 25 Mhz 030 (freshly booted, not on the internet)
  3685.  
  3686. 24. Convert all the levels to the new animation system.
  3687.     A. Load each old level.
  3688.     B. Go through the entire visible board and underboard
  3689.     C. If FrameCount==0 then FrameCount=1;
  3690.     D. Stuff 1 into the AnimationDirection
  3691.     All levels have now been converted to the new animation system! DONE.
  3692.  
  3693. 25. Edit io.c to handle loading a game that was using one set of graphics
  3694.     files into a system that is using completely different graphics files.
  3695.     Check for any currently illegal settings and adjust them.  DONE.
  3696.  
  3697. 26. Add in gfx/Spells/ and gfx/dat/ and gfx/CellEffects to MakeDemoOfChaos.txt
  3698.     DONE.
  3699.  
  3700. 27. GRAPHICS:
  3701.     Put in Xav's new moon from setupscreen as Sanctuary.  DONE.
  3702.     Put in Kreton's Wizard graphic as Wizard 1.  DONE.
  3703.     Edit Generator. DONE.
  3704.     Remove blood from ShapeChanger. DONE.
  3705.     Spriggan is messed up.  Fix him.  DONE.
  3706.     Mess with Witches as new wizards.  Leave this for Xav.
  3707.     Amphisbaena is all messed up.  Leave this for Joe or Xav.
  3708.  
  3709. 28. Edit SpellManager script file to remove everything to do with
  3710.     spell descriptions and images.  DONE.
  3711.  
  3712. 29. Add in code to load the setupscreen1 from
  3713.     gfx/Screens/English/SetupScreen1.iff   DONE.
  3714.  
  3715. 30. Rewrite the setup code to have everything on SetupScreen1 positioned
  3716.     correctly.  This took some time because the name gadgets were
  3717.     overwriting the border.  DONE.
  3718.  
  3719. 31. Add in code to load the setupscreen2 from
  3720.     gfx/Screens/English/SetupScreen2.iff  DONE.
  3721.  
  3722. 32. WOOPS!  I forgot to rewrite PutToSleep() to stop animating creatures
  3723.     that are asleep!  There is a sleeping Pegasus that is still flapping
  3724.     its wings like crazy!  NOW FIXED.
  3725.  
  3726. 33. Rewrite Flesh to Stone and Mass Petrification to properly stop the
  3727.     newly created inanimate object from being animated.  DONE.
  3728.  
  3729. 34. Rewrite Stone to Flesh and Inanimorphobiosis to properly reactivate
  3730.     the animation on a previously-animated creature.  DONE.
  3731.  
  3732. 35. Put Xavier in the scrolling credits and the docs. DONE.
  3733.  
  3734. 36. FLAW: The pentagrams on the "About" screen are now invisible due
  3735.     to the new color palette!  NOW FIXED.
  3736.  
  3737. 37. Add in code to load the EndTurn, Question Mark, Dismount, Load and Save
  3738.     gadgets from gfx/Gadgets/English/
  3739.  
  3740.  
  3741.  
  3742. How to test a lzx archive:
  3743. lzx t archive.lzx >T:test.txt
  3744.  
  3745.  
  3746. After converting all the gfx to IFF files, the following spells looked
  3747. horrible and I spent some time editing them.
  3748.  
  3749.  
  3750. Abath: I antialiased him and redrew his horn so now it looks really good.
  3751. Abduction Converted horribly so I edited it some.
  3752. Achiyalabopa: I added texture + antialiased it.
  3753. Acid Rain: Antialiased it. Beveled it.
  3754. Aerial Servant: I added texture + antialiased it.
  3755. Aesculapius: Skipped.  I think Xav has already redrawn it + Aes drew one in
  3756.   64x64 that needs to be shrunk down and used for this creature.
  3757.   Put in Xav's new "Snake" Aesculapius + drew a dead image for it.
  3758.  
  3759. Agathion: Antialiased it.
  3760. Air Elemental: Antialiased it.
  3761. Alliance: Antialiased it.
  3762. Alter Reality: I attempted to shade it with shadows.  Limited success.
  3763. Alternography: antialiased it.
  3764. Amphisbaena: Antialiased it.
  3765. Animate: Included Xav's stupendously wonderful looking Animate!
  3766. Apple Wood: Added some texture. Antialiased it.
  3767. Arborist: Antialiased it.
  3768. Archery: Antialiased it.
  3769. Arctic Wolf: I got rid of the hard black background + antialiased it. Then
  3770.   I changed the colors to be whitish like an Arctic Wolf should really look.
  3771.   The old wolf I saved as "Dark Wolf" for future use.
  3772. Armour: Antialiased it.  Replaced it with Xav's gray-scale Armour.
  3773. Aviary: I hated how the old one looked so Joe and I completely remade it.
  3774. Azer: Antialiased it.
  3775.  
  3776.  
  3777. Included Joseph's improved Abath, Arborist, Alliance, Agathion, Azer,
  3778. Apple Wood, Aviary.  I totally redid Joe's Aviary and Apple Wood and
  3779.   Archerotomy.
  3780.  
  3781. Included Xav's improved: Agathion, Air Elemental, Acid Rain.
  3782.  
  3783.  
  3784.  
  3785. I made a new variation of the baboon called baboon2.  I may use
  3786. this in the future somehow.
  3787.  
  3788. Baboon: Antialiased it.
  3789. Banderlog: Antialiased it.
  3790. Bandit: Antialiased it.
  3791. Basalt Golem: Antialiased it.
  3792.  
  3793. Basilisk: I gave the basilisk a purple eyeball + Antialiased it.
  3794. Battle Cry: It converted badly so I fixed it.  Then I anti-aliased the flag
  3795.   also.
  3796. Bat: Antialiased it.
  3797. Bat: I went back and totally redrew it and made a new dead body.  The only
  3798.      problem now is that it is not animated :(
  3799.      Included Xav's new well-drawn and animated Bat!
  3800.  
  3801.  
  3802. Betrayal: converted horrbily so I had to fix it.  Then I added shadowing to
  3803.   it.
  3804. Biohazard: Beveled it.
  3805. Bipedal Generator:  I always hated the way the Bipedal Generator looked so
  3806.   I anti-aliased it, recolored it and beveled it.
  3807.  
  3808. Bird Lord: I antialiased it.  Then I went back and antialiased the
  3809.   antialiasing so its SUPER smooth looking.
  3810. Blue Dragon: Double antialised it.  Its super smooth now!
  3811. Bodak: Antialiased it.
  3812. Boil: Antialiased it.  It looks a LOT nicer now! Redid it using Xav's new
  3813.   Flood graphic.
  3814. Bolter Wall:  I made it rotate.
  3815.  
  3816. Brain Drain and Brain Boost converted badly so I fixed them then I
  3817.   anti-aliased them.  Now they look really nice! (compared to how they used
  3818.   to look)
  3819. Brain Drain Beam converted horribly so I edited it and fixed it up and
  3820.   antialiased it.
  3821. Bury: Antialiased it. Threw it away because it sucked.  Pirated the bloody
  3822.   corpse from Xav's Scavengerism and the arrow from Xav's Animate and then
  3823.   drew some grass and a pile of dirt.  It looks 10x better than the old one.
  3824.  
  3825. Burstroem's Browser: Included Xav's book.  Added more antialiasing to the
  3826.   bottom of the book.
  3827.  
  3828. Included Joseph's new Bandit and Baboon.  They are both MUCH better than the
  3829.   originals!
  3830.  
  3831. Included Joseph's new Battle Cry and Biohazard.  Battle Cry REALLY needs
  3832.   32x32 pixels and 256 colors!
  3833. Included Xav's Fantabulous Battle Cry!
  3834. Included Xav's new Biohazard.  I will use Joseph's Biohazard as something
  3835.   else.
  3836. Included Joseph's new Bipedal Generator and Bodak.
  3837. Edited Joseph's new Basalt Golem into an animation and included it.
  3838.  
  3839.  
  3840.  
  3841.  
  3842. Camel: Double Antialiased it and made the hump bigger too.
  3843.  
  3844. 16x16 pixels is such an absurdly low resolution that it is many times not
  3845. possible to do proper anti-aliasing :(
  3846.  
  3847. Cartography: Antialiased it.  Included Joe's new Cartography.
  3848. Cat Lord: Antialiased it. Included Joe's new Cat Lord.
  3849. Centaur: Antialiased it.  The tail looks much better, its fluffier.
  3850. Chaos Lord: Antialiased. Included Joe's new Chaos Lord.
  3851. Chronomancer: Antialiased it. Replaced it with Xav's Chronomancer from his
  3852.   setupscreen.  Drew a dead body for it.
  3853. Clay Golem: Made a dead body for it.
  3854. Cloak: antialiased it.  Included Joe's new cloak.  It could be better.
  3855. Combat: Included Joe's new Combat.
  3856. Combat Drain Beam: Included Joe's new Combat Drain Beam.
  3857. Command: Didn't translate so well so I fixed it.  Later on I replaced it
  3858.   with Xav's fantastic new version!
  3859. Confidence: I included Joe's new Confidence.
  3860. Convert: Changed the "M" to a "C" and antialised the whole thing.
  3861. Crimson Death: Antialiased it.
  3862. Crocodile: Antialiased it.  Included Joe's slightly improved Crocodile with
  3863.   texture on his back + it now has feet.
  3864. Cursed Sword: Antialiased it and made the hilt a bit smaller.
  3865.  
  3866.  
  3867. Dalek: Antialiased it. Included Joe's improved version + double antialiased
  3868.   it.
  3869. Dao: Antialiased it.
  3870. Dark Citadel: Antialiased it.
  3871. Dark Wood: Antialiased it. Replaced it with Xav's new bleeding version.
  3872. Dead Revenge: Antialiased it.  Included Joe's improved version.
  3873. Demon: Antialiased it.
  3874. Depth: It was already partly antialiased!  Oh well, I antialised it all the
  3875.   way and now it looks sort of fuzzy but there is NO blockiness at all.
  3876. Derro: Antialiased it.
  3877. Destroy Wall: The converted version looks BETTER than the original!  No
  3878. changes made.
  3879. Dire Wolf: Antialiased it.  It really looks better.
  3880. Discard: Antialiased it.
  3881. Disection: Antialiased it.
  3882. Disrupt: Antialiased it.
  3883. Dragon Nest: Antialised it but it didn't work out very well. :(
  3884. Drain: Antialiased it.
  3885. Dread Elf: Antialiased it.
  3886. Drelb: Antialiased it.
  3887. Dual Earthbind: Antialiased it.
  3888.  
  3889. Eagle: Antialiased it.
  3890. Earth Elemental: Included Joseph's new version.
  3891. Eidetic Xenogenicide: Joseph totally redesigned it.  It looks much better.
  3892. Elephant: Antialised it.
  3893.  
  3894.  
  3895. Sent Xavier Elf Boots + Harpy because I don't know how to make these look
  3896.   better.
  3897.  
  3898.  
  3899. Elm: I 100% Antialiased it.
  3900. Emerald Dragon: I 100% antialiased it.  It looks really nice now.
  3901. Encumberance Beam: I included Joseph's new version.
  3902.  
  3903. Exorcise: I simply replaced the old Exorcise graphic which wasn't so bad
  3904.   with a new one designed by Aes which is TOTALLY AWESOME!  It has great
  3905.   shading in it!!!  Oops its 2 pixels to tall and 2 pixels too wide!
  3906.   NOW FIXED!
  3907.  
  3908.  
  3909.  
  3910. Falcon: Antialiased it.
  3911. Faun: Antialiased it.
  3912. Fir: Antialiased it.
  3913. Fire: Antialiased it.
  3914. Fire Bat: Antialiased it.
  3915. Joseph made a new "Bat Out of Hell" graphic (It might not be 100% finished
  3916. yet)
  3917. Fire Demon: I antialiased it and made the color texture a bit better.
  3918. Fire Elemental: I antialiased it and changed some pixels around to add some
  3919.   extra color.
  3920. Fire Shield: Antialiased it a tiny bit.
  3921. Fireball: Antialised it.  Replaced all green with Purple.  Replaced all
  3922.   Gray with Orange.  Splattered some more orange around in the red.
  3923. Flesh to Stone: Antialiased it.  Replaced all Green with light gray. The
  3924.   rock had many transparent black holes in it!  I Replaced some of these
  3925.   with dark gray and others with hard black (nontransparent).  I also added
  3926.   some shading to the "+" which looks very nice.
  3927. Floating Eye: Antialiased it and cleaned it up some.  It looks better now.
  3928. Flood: Antialiased it and threw some extra colors arond randomly in 1 of
  3929.   the frames.
  3930. Flood Shield: Antialiased it and then added beveled edges and more color.
  3931. Fly: Antialiased it.
  3932. Free All: Antialiased it.  Changed the color of the 2nd key to be
  3933.   compatible with antialiasing.
  3934.  
  3935. Generator: Antialiased it.
  3936. Ghast: Double Antialiased it.
  3937. Ghost: Double Antialiased it + added sparkle to the white and blue dots.
  3938. Ghoul: Antialiased it and added sparkle to the dots.
  3939. Giant Beetle: Antialiased it.  Used a beetle clipart as a template to
  3940.   redraw it. NOW IT LOOKS AWESOME!
  3941. Giant Rat: I antialiased it and it now looks WAY THE HELL better!!!
  3942. Giant Spider: Antialiased it but the colors were so dark to start with that
  3943.   you can't really see any difference.
  3944. Goblin + Goblin Bomb: Antialiased.
  3945. Golden Dragon: Antialiased.  It looks much better now.  This creature
  3946.   already had halfway good shading to it.
  3947. Gooey Blob: I single antialiased it and it looked good.  But there are so
  3948.   many shades of the same green in the palette I decided to go ahead and
  3949.   double antialias it.  It now looks very fuzzy.  I'm not sure if this is
  3950.   better than single antialiasing or not.  It does look smoother and less
  3951.   pixelated but its very fuzzy.  Its probably better to have it look fuzzy
  3952.   so I'm leaving it like this.
  3953. Gorilla: Antialiased it.
  3954. Gravity Sphere: It looks horrible and I didn't bother trying to fix it in
  3955.   any way.
  3956. Gray Elf: Antialiased it.
  3957. Green Dragon: I antialiased it.  Then I tried adding some shadowing and
  3958.   texture and it came out quite nice!  Its nowhere near Xav-Quality but its a
  3959.   lot better than it was originally.
  3960. Green Oozey Crap: I screwed around with it and stuff... It looks better
  3961.   than it did.
  3962. Grizzly Bear: AntiAliased it and added some shading to the dead image.
  3963. Gryphon: Antialiased it.
  3964.  
  3965.  
  3966. Halfling: Antialiased him.  Made his dead image be decapitated with his own
  3967.        sword.
  3968. Harpy: I antialiased it.  Ack!  Its drawn on a hard foreground black!
  3969.        NOW FIXED. A few days later I went back and partly double
  3970.        antialiased it and added some simple shading to it.
  3971. Haste: Antialiased it.  I tried to add a drop shadow to the + but it looked
  3972.        terrible.
  3973. Haunt: I antialiased him then I animated him!  This is my first attempt at
  3974.        animation.
  3975. Hidden Horror: This is supposed to look identical to a halfling so I just
  3976.        copied the Halfling as this.
  3977. Higher Devil: I only made extremely minor touchups on this.
  3978. Hippocrates: Antialiased him.  Moved him to the edge to make room for my
  3979.        new improvements.  Added a Caduceus and a Red Cross so that it is
  3980.        obvious that he heals.  Removed the Dead Orc Image and made him a
  3981.        real Dead Image.
  3982. Horror: Antialiased it and added some simplistic shading.
  3983. Horse: Antialiased it.
  3984. Hybsil: Antialiased it.
  3985. Hydra: Antialiased it.  Added shading.
  3986. Hyperclone: Made simple modifications.
  3987.  
  3988.  
  3989. Ice Breath: Tried to antialias it some.
  3990. Imp: Antialiased it and added some nice shading!  Redrew the Dead Image.
  3991.  
  3992.  
  3993. Inanimage and Inanimatologist look identical to a Wizard 1!
  3994. I propose:
  3995. Xav's Wizard 1 becomes Inanimage.
  3996. Xav's Wizard 1 minus the wand becomes Inanimatologist.
  3997. There will be a completely new wizard for Wizard 1. (I'll decide which
  3998. graphic later on)
  3999.  
  4000. This means the old Inanimage/Inanimatologist/Wizard 1 will be used for
  4001. absolutely nothing!  But I can assign him to be something later.
  4002. I can also draw sparkles around the end of the wand.
  4003.  
  4004. Inanimorphobiosis: I couldn't really do anything to this because it just
  4005. plain needs a much better rock.
  4006.  
  4007. Invert: I messed around with it some... Didn't really improve it.
  4008.  
  4009.  
  4010. Jaguar: Antialiased it.
  4011. Jann: Antialiased it.  The dead image was the same as the Dead Orc so I
  4012.       redrew it.
  4013. Joker: I added shading to it and made it look 8x better than before!!
  4014. Juju Zombie: Antialiased it.
  4015. Justice: Change the shading on part of his face.
  4016.  
  4017. Kill: Added Beveling with only limited success.
  4018. King Cobra: Antialiased it and added a bit of shading.
  4019.  
  4020.  
  4021. Leopard: Antialiased it and changed the green spots into golden spots.
  4022. Lesser Devil: Antialiased it.
  4023. Level: Beveled it and shadowed it.
  4024. Lich: Antialiased it and gave it yellow eyes.
  4025. Lich Lord: Antialiased it and gave it yellow eyes and modified the crown.
  4026. Lightning: Beveled it.
  4027.  
  4028. Magic Bow: Antialiased it and made the curve of the bow extremely smooth.
  4029. Magic Castle: The original was so so hopeless looking that I didn't bother
  4030.   trying to smooth it out.  I just replaced it with Xav's "Dark Castle".
  4031.   The Dark Castle has a flaw: The Door and windows are made of the
  4032.   transparent black instead of the hard foreground black.  NOW FIXED.
  4033. Magic Knife: I replaced the old one with Xav's new one.
  4034. Magic Shield: I simply replaced the old one with the one that Aes drew for
  4035.   me many months ago.  However this shield looked like a normal shield.  But
  4036.   this shield ONLY increases your magic resistance so I added some
  4037.   color-cycling to it so that people would remember that it is a _magic_
  4038.   shield not a real shield.
  4039. Magic Sword: I replaced the old one with Xav's new one.
  4040. Magic Wand: I never liked the old one so I drew a completely new one.
  4041. Magic Wood: I completely redrew the trunk so its 10x better.  I haven't
  4042.   decided what to do about the treetop though?  Should it be a normal treetop
  4043.   but with some color cycling added to indicate its a magic tree?  Or what?
  4044. Manticore: I antialiased it then I drew a shadow under the wing.  The
  4045.   shadow looks nice.
  4046. Marid: Antialiased it and added the stripe to the dead image.
  4047. Mass Morph: I just took Xav's Animate spell and switched it around.
  4048. Memory Master: Antialiased him and made a completely new dead body with
  4049.   blood splats and decapitated head.
  4050. Memory Mage: (Originally looked identical to Memory Master).  I took my new
  4051.   Memory Master graphic and gave him a Magic Wand + shaded his costume
  4052.   according to the light shining on him from the magic wand.
  4053. Mind Flayer: Antialiased it.  Added a bit of shading.
  4054. Mount: Antialiased it.  Added a bit of shading.
  4055. Move it: Antialiased it, beveled it and made the whole the green for "go"
  4056. Mud Man: Antialiased it.  Totally redid the color + added a bit of shading.
  4057.   Totally redid the dead image.
  4058.  
  4059. Neo-Otyugh: Antialiased it and darkened the back leg.
  4060. Nightmare: Antialiased it and darkened the back legs.
  4061. No Grow: Antialiased it and added texture.
  4062. No Mount: Antialiased it and made the tail better.
  4063. Nuke: Redrew it. Antialiased it.
  4064.  
  4065. Ogre: Antialiased it, shaded it, made the arm have a shadow, improved the
  4066.   head.
  4067. Ogre Mage: The Ogre Mage looked identical to the Ogre so I just kept it
  4068.   that way for now.
  4069.  
  4070. Ogre Warrior: The original Ogre Warrior was just a mirror image of the Ogre
  4071.   so that is how I did the new one.  I just mirrored the Ogre and saved it.
  4072.   This means the shadowing is actually backwards.  But oh well... we can
  4073.   worry about that later.  Maybe it will be funny to have a backwards shadow
  4074.   on him?
  4075.  
  4076. Ogre Assasin: He's just like the Ogre Warrior but with a differnet
  4077.   animation sequence.  He has the backwards shadow as above.
  4078.  
  4079. Oracle: Designed by Xav.  I brightened the crystal ball a bit and made it
  4080.   look like the Oracle's fingers were touching the crystal ball.
  4081.   For the dead image I drew a crystal ball laying on the ground + pirated
  4082.   the dead image from Scavengerism.
  4083.  
  4084. Orange Jelly: Antialiased it.  This graphic needs professional attention.
  4085.  
  4086. Orc: Antialiased it.  Changed his face.
  4087. Orcs: same as Orc.
  4088.  
  4089.  
  4090. Paradigm Shift: Antialiased it.
  4091. Passage: Antialiased it. Beveled it.
  4092. Pegasus: Antialiased it.
  4093. Pit: Recolored it and antialiased it.
  4094.  
  4095.  
  4096. Probably use a Xav graphic for Plasma Beam.
  4097. Platinum Dragon: Antialiased it.  Double Antialiased parts of it to make it
  4098.   really smooth.
  4099. Points: Antialiased it.  Beveled it.
  4100. Poison Dagger: Antialiased it.  Drew blood on it.  Drew blood dripping from
  4101.   it.  It now looks really cool.
  4102. Pool: Antialiased it.
  4103. Power Wall: Antialiased it.
  4104. Pox Shield: Antialased it.
  4105. Protection: NEEDS TO BE REDRAWN!
  4106. Pseudodragon: Antialiased it.  Added a bit of shadow under the wing.
  4107.   Double antialiased parts.
  4108. Pyrohydra: Its identical to the Hydra.
  4109. Pyrotechnics: Antialiased it.  Beveled it.
  4110. Python: Antialiased it.
  4111.  
  4112. Quench: Antialiased it + smoothed the fire a bit.
  4113. QuickShot: Antialiased it and beveled it and changed the color to use the
  4114.   color cycling color and some brown.
  4115.  
  4116.  
  4117. Radioactive Land: It was just a bunch of green dots, it could have been
  4118.   grass!  I changed the green dots to purple dots so now it really looks
  4119.   radioactive.
  4120. Raise Dead: Pirated some of Xav's gfx and rearranged them and edited them
  4121.   into a nice Raise Dead graphic.
  4122. Range Boost: Antialiased it and beveled it.
  4123. Red Dragon: Double antialiased him.
  4124. Reflector: The colors did not convert well so I recolored it and
  4125.   double-beveled it.
  4126. Replicate: I tried to antialias it but it came out looking HORRIBLE so I
  4127.   left it alone.
  4128. Repulsion: Double beveled it and added many more shades of color.
  4129. Roper: Antialiased it + shaded it.
  4130.  
  4131.  
  4132. Separation: Took the alliance spell and drew a big X over it.
  4133. Shadow Dragon: Antialiased the arms.  Put a 3,1,0 brown dot at the end of
  4134.   the tail and foot.
  4135. ShapeChanger: Joseph should do some kewl morphing with this!!
  4136. Skeleton: Antialiased it.
  4137. Slow: Beveled it.
  4138. Solar: Antialiased it.
  4139. Spectator: Made it perfectly round.  Antialiased it.  I could easily make
  4140.   an awesome animation out of this one!  *****************
  4141. Spectre: Antialiased it.
  4142. Speed: Beveled it.
  4143. Spriggan: Antialiased it.
  4144. Still: Antialiased it.
  4145. Stone Giant: Antialiasd it.
  4146. Stone Golem: Made a better dead body.
  4147. Stone to Flesh: Pirated some Xav gfx to make this one.
  4148. Strong Wall: Darkened it.
  4149. Subversion: Beveled it.
  4150. Summons: Beveled it.
  4151. Swap: Changed the colors a bit + beveled it.
  4152.  
  4153.  
  4154. T-Rex: Antialiased him.  Double antialiased his back.
  4155. Teleport: Remade it using Xav's little man graphic.
  4156. Tempest: Antialiased it.
  4157. The Exorcist: I went crazy and totally redrew him with magical crosses that
  4158.   are animated with magical glowing + he turns his head.  I also made a dead
  4159.   image of him in a pool of blood with his cross stuck threw his body!
  4160.   Its totally cool!  His legs could be better though, but I don't know how?
  4161. Thundermare: Simple antialiased him + added blood on the dead body.
  4162. Torment: Beveled it.
  4163. Troll: Simple antialiasing + some blood.
  4164.  
  4165.  
  4166. Ubiquiscope: Beveled it.
  4167. Unicorn: simple antialiasing.  Changed the horn to white.
  4168.  
  4169.  
  4170. Vampire: Antialiased it. Shaded it.
  4171. Vodka: Find Kreton's Vodka!!!!
  4172. Volcano: Antialiased it a bit.
  4173. Vortex: Antialiased it a bit.
  4174. Vulture: Antialiased it.  Shaded it some.  Does this look ok?
  4175.  
  4176. Wasp Nest: Antialiased it.  The curves are ultra smooth now.
  4177. White Dragon: Antialiased it.  Added shadowing under the wings.
  4178. Wight: Antialiased it.
  4179. Wolverine: Antialiased it.  Tried to put some blood on the dead body.
  4180. Wood Elf: antialiased it.  Joseph improved it some.  Then I drew an arrow
  4181.   stuck in his head for the dead body. hehe.
  4182. Wraith: Antialiased it.
  4183.  
  4184.  
  4185. X-Ray: Beveled it.  Replaced the whole thing with Joseph's new color
  4186.   cycling X-ray.
  4187. Zombie: Antialiased it.  Tried to shade it some.
  4188.  
  4189.  
  4190. All spells A-Z are done!!!!! (EXCEPT FOR W!!!)
  4191. All W is done except for Wizards!
  4192.  
  4193. Went through Joe's L-Z.
  4194.  
  4195. Added in Joseph's new:
  4196. spectator, spriggan, speed, storm, sleep, skeleton, Hyperclone, Shocker.
  4197. Shape Changer, Shadow, Magic Attack, Lich Lord, Leopard
  4198.  
  4199. Put in Joseph's new: Joker, Justice (goatee), Iridium Horse (back leg),
  4200. King Cobra (hood, now brown), Imp (more frames of animation), Hippocrates
  4201. (now has a 2 pixel hat), Free All (now has 3 keys instead of only 2),
  4202. Dark Power (multi-shaded green), Aerial Servant (many frames of animation
  4203. + different colors)
  4204.  
  4205.  
  4206. Eye for an Eye: Needs to be totally redone! Animate Sux! Exophagy doesn't
  4207. even have a graphic!
  4208.  
  4209. Sent Eye for an Eye, Animate, Exophagy to Xav along with spell
  4210. descriptions:  They came back looking unbelievably awesome!!!!!
  4211.  
  4212. I removed the green from the side of the Tree in Animate.
  4213.  
  4214. Xav's Telescope: I lightened the moon.
  4215.  
  4216. Included Xav's Magic Bolt, Magic Glass, Mana Battery.
  4217.  
  4218. Included Xav's amazingly great new: Shadow Wood, Dark Wood, Fir Tree,
  4219. Magic Wood, Apple Wood.
  4220.  
  4221. Included Xav's amazingly great new:  Violet Fungi, Gooey Blob, Green Ooze,
  4222. Orange Jelly, Fire, Flood, Earthquake.
  4223.  
  4224.  
  4225. ---------------------------------------------------------------------
  4226.  
  4227. * August 2, 2000: The size of the release executable file "chaos" is
  4228.   325816 bytes.  On July 25 it was 421048.  SAVED 95232 bytes!
  4229.  
  4230. * Sent v2.9 to Xav on August 2, 2000 so he can design gfx for it over his
  4231.   2 weeks vacation.
  4232.  
  4233. * Put in Xav's fixed Wizard 2, Wizard 3 and Fly.  We still need 4 female
  4234.   wizards.
  4235.  
  4236. * Xav says to change the French spell desccription of Dark Citadel from
  4237.   Citadèle to Citadelle.  DONE.
  4238.  
  4239. * August 5, 2000: TileCount=824.  There are 824 tiles in the game.
  4240.  
  4241. * BUG: Mana Battery Scrolls give bonus spells just like a real Mana
  4242.   Battery.  NOW FIXED.
  4243.  
  4244. * BUG: 1 occurrence of "Brain Dead" was not using translated strings thus
  4245.   it was always appearing in English.
  4246.  
  4247. * Sprained my brain.  No work done for 10 days.
  4248.  
  4249. * August 15, 2000: Replaced all occurrences of "Run JCsound >NIL:" with
  4250.   "Run <>NIL: JCsound <>NIL:"
  4251.  
  4252. ********************************************************************
  4253.        Xav Returns from Vacation!  Lots of new Tiles!
  4254. ********************************************************************
  4255.  
  4256. Included Xav's new gfx:
  4257. Ball Lightning, Basalt Golem, Bless, Charm, Clay Golem, Coercion,
  4258. Cure, Dalek, Dao, Dark Wood, Death Bringer, Demonic Touch, Depth,
  4259. Destroy Wall, Discard, Double, Elephant, Fireball, Freeze,
  4260. Haste, Horse, Hyperclone, Irvine's Invulnerability, Justice, 
  4261. Lightning, Lion, Magic Bow, Meteor Storm, Moveit, Mullac de Irvine,
  4262. Protection, Pyotechnics, Quickshot (quickshot is hard to read but I went
  4263. ahead and included it anyway).
  4264. Radioactive Land, Recover Boost, Reflector, Replicate, Request, Reveal,
  4265.  
  4266. Restoration (I didn't like the one with the dithered heart, it needs more
  4267. shades of color or higher resolution so I used the nondithered version.)
  4268.  
  4269. Seismology, Shocker, Simulacrum, Sleep, Solar, Standard Wall, Stone Giant,
  4270. Stone Golem, Storm, Strong Wall, Touch of God, Triple,
  4271.  
  4272. Turns (I redid the 0).
  4273.  
  4274. Uncertainty, Unicorn, Vodka, Volcano, Wake, Weak Wall, Wight,
  4275. Wizard  1, Wizard 1, Wizard 6, Wizard 7, Wizard 8, Wizard Wings, Wraith,
  4276. Zombie.
  4277.  
  4278.  
  4279. The following gfx were identical to the gfx already in my version of
  4280. the game: Fly, Wizard 2, Wizard 3.
  4281.  
  4282. ********************************************************************
  4283.       END: Xav Returns from Vacation!  Lots of new Tiles!
  4284. ********************************************************************
  4285.  
  4286. August 18, 2000:
  4287.  
  4288. * Included Frédéric's new Français Spell Descriptions: Water Elemental,
  4289.   Sluggishness Beam and Combat Drain Beam.
  4290.  
  4291. Frédéric bug report:
  4292. * Something strange happened when I cast consecrate on a higher devil sitting
  4293.   on the bottom border of the screen: the devil himself was not killed, of
  4294.   course, but the spell did extra sound effects, as if there had been creatures
  4295.   below. And I heard an allelujah sound, and at the end of the turn the bonus
  4296.   window opened. No victim, no "Other", but I had the choice of 1 spell among
  4297.   31 !!!
  4298.  
  4299.   The trouble was that the Drainer() function had NO error checking!  Ack!
  4300.   all these years its been affecting cells that don't exist!  NOW FIXED.
  4301.  
  4302.  
  4303. * Sent all English and Français spell descriptions to Red|Blue in Quebec for
  4304.   proofreading.  He liked the game "Romance of the 3 Kingdoms" and "Bandit
  4305.   Kings of Ancient China" so I figure he'll like Chaos.
  4306.  
  4307.  
  4308. >>> * Due to impurities, a generator went asleep but continued to generate
  4309. >>> sleeping creatures. It's kind of strange don't you think ? Impurities
  4310. >>> shouldn't put generators to sleep ! They should only change their
  4311. >>> allegeance to a wizard or the independents (the sleeping creatures
  4312. >>> generated are often destroyed as soon as they are generated :-) )
  4313. >> This sounds sooooooooooo hilarious!!!! I don't know how you find all
  4314. >> this weird stuff out!!!! hehehehhahahahahahah 8)
  4315. >> It sounds so funny I'm not going to change it. I've never seen it
  4316. >> happen before! And if it does happen it must be very rare.
  4317.  
  4318. >> I probably should fix it so that it doesn't change to dead wizards...
  4319. >> either that or let creatures move, even if they belong to a dead
  4320. >> wizard.
  4321. > That would be a good enhancement. And change the dead revenge so that dead
  4322. > players keep control of the generated creatures.
  4323.  
  4324. * NEW FEATURE: I have now adjusted the code, such that if a creature exists
  4325.   who belongs to a dead wizard, the creature will still be moved as usual.
  4326.  
  4327. * DEAD REVENGE IMPROVED: I have now adjusted the code such that a wizard
  4328.   who is killed while posessing the Dead Revenge powerup will not lose ANY of
  4329.   his generators!  The wizard will die, but his generators will live on!
  4330.   And any creatures produced by the generators will be controllable by the
  4331.   player!  I forsee this as being strategically important primarily in
  4332.   multiplayer games where a certain wizard may be killed first, but can still
  4333.   have some influence in the game due to his generated creatures.
  4334.   For years I haven't even bothered casting Dead Revenge because it just
  4335.   didn't really seem to benefit me; there were always better spells to cast.
  4336.   Now however, I will always try to cast Dead Revenge!
  4337.  
  4338. * EDITED Dead Revenge spell description.
  4339.  
  4340.  
  4341.  
  4342. On 18-Aug-00, Frédéric Delacroix wrote:
  4343.  
  4344. > I have found a strange bug in the game related to the chaos lord and fire.
  4345. > It could be the fire shield (and possibly other shields) that's not working.
  4346. > Here are my notes.
  4347.  
  4348. > * BUG ! My wizard (an undead chaos lord, by the way, with shocker) was
  4349. > covered by its own fire breathed by one of my 3 platinum dragons, but it did
  4350. > not die !!! I destroyed the fire with another platinum dragon breath, and I
  4351. > could see a very very strange animation, alternating: my wizard (wizard 1),
  4352. > a grey elf (previouly dead) and the dead grey elf. I guess this is because
  4353. > the fire had 3 animation frames... ? When I query the stats, everything is
  4354. > back to normal chaos lord stats, except for life force who's back to 19.
  4355. > * No wait ! There's another big strange difference ! It's Wizard 1 belonging
  4356. > to nobody ! And it moved and attacked (but only shot once instead of three)
  4357. > with the independents ! He killed my cats ! What a strange creature ! I kept
  4358. > the autosave (083)
  4359.  
  4360. > * Actually it moves between me and my cats (I have the cat lord), not with
  4361. > the independents.
  4362.  
  4363.   JC: ok, I have investigated this and it all comes down to this:
  4364. * BUG: Fire Shield and Flood Shield DO NOT WORK!  Ack!  All these years
  4365.   Fire Shield and Flood Shield have not been working!  NOW FIXED.
  4366.  
  4367. Included Frédéric's new English and Français spell descriptions for
  4368. Power Walls and Webs.
  4369.  
  4370. --------------------------------------------------------------------------
  4371. New tiles from Xav:
  4372. Copied XMAN.IFF to UnusedGfx/Xman2.iff
  4373. Copied QUERY.IFF to UnusedGfx/
  4374.  
  4375. Included the new Camel, Fire Bat, Mnemicide, Nuke, Singular Earthbind and
  4376. Zombie gfx.
  4377.  
  4378. Ogre: I haven't decided what to do about the Ogre yet.  Maybe I'll use
  4379.       him as the Ogre Warrior?  He looks good, but he's not animated + I
  4380.       really REALLY like the shadow on the current Ogre.  I'll probably
  4381.       make him the new Ogre Warrior.
  4382.  
  4383. Orc: The orc looks great!  But the problem is that an orc is very wimpy in
  4384.      this game and he should not be so big.  He should be small and wimpy
  4385.      looking.  He can look good, so long as he is smaller to reflect his
  4386.      weakness compared to other creatures.
  4387.  
  4388. Do you think you could make a small creature to be the orc?
  4389. -------------------------------------------------------------------------
  4390.  
  4391.  
  4392. I went through Joseph's new gfx.
  4393.  
  4394. Included Joseph's new Mutate, Platinum Dragon, Pool, Recognomancer, Roper,
  4395. Tempest, Wizard 3 (just changed the black eyes to brown), Wizard 8.
  4396.  
  4397. The new Halfling looks good, but his helmet makes him look bigger.  We
  4398. really need the Halfling and Imp and Orc to be small creatures.
  4399.  
  4400.  
  4401. * FLAW: When a Tempest kills something, it doesn't make the dying noise and
  4402.   it doesn't print any text message either.  It just sort of disappears.
  4403.   NOW FIXED.
  4404.  
  4405. On 22-Aug-00, Frédéric Delacroix wrote: ---------
  4406. > * Garbage appears in the french translation when I have reveal in my spell
  4407. > list and the mouse pointer is over it. I get something like
  4408. > "RévélerÜF\«J­I@". I looked at the "Reveal" description file but it seems ok
  4409. > to me... ? This only happens with this spell.
  4410.  
  4411. JC: It is the very last spell.  The very last spell wasn't being
  4412.     NULL-terminated.  NOW FIXED.
  4413.  
  4414. > * When a creature has a negative combat statistic, it can heal other
  4415. > creatures. But the "m" key does not show it can move over friendly creatures
  4416. > to heal them.
  4417.  
  4418. NOW FIXED.
  4419. -------------------------------------------------------------------------
  4420.  
  4421. * BUG: If you shoot and kill your own wizard, when you end your turn,
  4422.   sometimes various random enforcer hits happen and always various random
  4423.   bits of memory get corrupted.  This was caused by MoveWizard() being
  4424.   performed on a dead wizard so it thinks the wiz is in cell -1 which
  4425.   causes many illegal mem accesses.  NOW FIXED.
  4426.  
  4427. August 28th, 2000: The electricity was out from around 2:00 a.m. to about
  4428. 7:40 a.m.  There was no light!  I couldn't see anything!  It was like
  4429. living in the dark ages!  I couldn't get on the internet!  And I couldn't
  4430. play Chaos!  I almost died!
  4431.  
  4432. * Included Xav's new Singular Earthbind, Dual Earthbind, Dragon Nest and
  4433.   Goblin / Goblin Bomb graphics.
  4434.  
  4435.  
  4436. * BUG: The archery effect randomly locks up the entire computer (sometimes).
  4437.   Using logfile code I was able to narrow it down to the following piece of
  4438.   code:
  4439.   DO_WHILE (px != tx)
  4440.      register double y = (double)(mx - px);
  4441.      AUDIONote (i--);
  4442.      MaskWritePixel (rastPort, px, (WORD)py - h + (WORD)(d * y * y));
  4443.      px += e;
  4444.      py += dy;
  4445.   LOOP
  4446.  
  4447.   I was unable to narrow it down any further.  I inserted more logfile code
  4448.   to prove for a fact exactly which line was causing the machine lockup but
  4449.   then the bug refused to happen.
  4450.  
  4451.   AUDIONote() and MaskWritePixel() are used countless times throughout the
  4452.   game and have proven themselves to be 100% reliable.  So what could the
  4453.   problem be?  What is different about this use of those routines and any
  4454.   other?  ANSWER: The animator task is STILL RUNNING during the archery
  4455.   effect!  During all other effects there is an ObtainSemaphore(&BoardLock);
  4456.   which prevents the animator task from running!  The archery effect would
  4457.   actually look better if it had an Obtain/Release Semaphore pair in it.
  4458.  
  4459.   Ok, but the main program and the animator don't share any variables that
  4460.   are changed anywhere EXCEPT for 1 thing:  The animator task contains the
  4461.   following code:
  4462.  
  4463.         AnimatorrastPortLayer=rastPort->Layer; // Disable clipping while we have a lock on the board.
  4464.         rastPort->Layer=0;             // No OS clipping = more SPEED.
  4465.  
  4466.   MaskWritePixel(rastPort,x,y) is using rastPort just like the animator is 
  4467.   using.  This is as it should be.
  4468.  
  4469.   So I theorize that sometimes task switching kicks in right in the middle
  4470.   of a OS WritePixel() call such that WritePixel() starts out using rastPort
  4471.   with a layer and ends up using a rastPort without a layer (or vice versa).
  4472.   And this somehow makes the OS go insane and crash.
  4473.  
  4474.   So how should I fix this?
  4475.   A) Add an ObtainSemaphore() ReleaseSemaphore() pair to the archery code?
  4476.   B) Comment out that layers disabling code in the animator task?
  4477.  
  4478. I am choosing option B for the following reasons:
  4479. 1. I don't ever want this bug to happen again!  Someday someone might code
  4480.    a new routine that does writes or reads from rastPort without getting a
  4481.    lock on &Board first!  Then the bug will be back!
  4482. 2. I don't have time to fiddle around chasing silly bugs like this so we'll
  4483.    just have to settle for an animator task that is now 10% to 15% slower.
  4484. 3. Now that I've implemented the fix, THAT MYSTERIOUS BLUE LINE THAT KEPT
  4485.    RANDOMLY APPEARING ON THE LEFT HAND SIDE OF THE BOARD IS GONE FOREVER!
  4486.    NOW FIXED!
  4487.  
  4488. * BUG: Strange blue line randomly appears on the left side of the board.
  4489.   NOW FIXED (see above).
  4490.  
  4491. * PROBLEM: Using default settings the music is playing during the bonus
  4492.   spell selection panel.  This causes JCsound to fail.  This doesn't hurt
  4493.   anything but it is disconcerting to the user to see messages in the cli
  4494.   window that say "ChaosDigitalSoundSubProcess failed returncode 150"
  4495.   so I have now changed the bonus spell panel to not attempt to play any
  4496.   sound effects if the music is playing.  NOW FIXED.
  4497.  
  4498. * Included Xav's Abduction graphic (the one with the flying saucer).  The
  4499.   only trouble is that the Abduction spell doesn't really abduct anyone.
  4500.   Abduction should really be renamed as BrainWashing or something.
  4501.   "Abduction" should be the same as Vanish but I can't think up a way to
  4502.   make it be different from Vanish. (?)
  4503.  
  4504.  
  4505. September 3, 2000:
  4506. * Included Joseph's new Eagle (2 extra frames), Skeleton (Added a few new
  4507.   frames), Dragon Nest (He thought it looked to much like a friendly little
  4508.   fireplace so he made it round.  It is now an interdimensional "portal"),
  4509.   Pegasus (1 extra frame), Crocodile (fixed the feet).
  4510.  
  4511. * FLAW: A Range Boosted or Aesculapiused Goblin loses some ability when
  4512.   killing an Archer and picking up the bow.  NOW FIXED.
  4513.  
  4514. September 11th, 2000:
  4515. * Included Xav's new Français setup screen I and II into the game.
  4516.  
  4517. * Sent v2.9d + A500 + Trumpcard 500 with 200 meg HD and 4 megs ram to
  4518.   Vivian in exchange for a SCSI CD-ROM drive and 2 Amiga Active Magazines.
  4519.  
  4520. * FLAW: If a person doesn't have narrator.device installed then the game
  4521.   won't play.  I have now removed all narrator.device dependencies so this
  4522.   is NOW FIXED.
  4523.  
  4524. * ADDED a new code module prefs.c to Load and Save user preferences in
  4525.   a plain ASCII file.  I just hacked and slashed sm.c into prefs.c.  This
  4526.   ended up still being a lot of work.  Over 1200 lines of code.
  4527.  
  4528. September 14th, 2000:
  4529. * New menu option: "Save Prefs"
  4530.  
  4531. * Changed Français info panel Tirer -> Tir.
  4532.  
  4533. Frédéric writes:
  4534. * "If you want to read about a spell, point at it and press "q" for Query."
  4535. I let it as is, but there's something you should be aware of: in the french
  4536. keymap, I must press "a" instead of "q" to get info. But this can change also
  4537. for other french-speaking countries. What you should do is use the
  4538. keymap.library (in ROM) to revert the wanted character into a wanted
  4539. keypress, so that the letter can be correct in all keymap configurations.
  4540.  
  4541. JC: Ok I did this and tested it and it works.  NOW FIXED.
  4542.  
  4543.  
  4544. * PROBLEM: Now that we have improved pearl.font for Chaos there can be a
  4545.   problem.  If a person already has the old pearl.font installed and is
  4546.   using it in his workbench or CED or whatever, then it will already be
  4547.   loaded.  Thus when Chaos attempts to load "pearl.font" it will load
  4548.   their old unimproved version since it is already in memory.
  4549.   Therefore I have now renamed pearl.font -> ChaosPearl.font and
  4550.    ran fixfonts on it.  NOW FIXED.
  4551.  
  4552. * Made documentation directories.  Copied the quickstarts into them.
  4553.  
  4554. * Added #?.prefs and Documention/ all to MakeDemoOfChaos.txt
  4555.  
  4556. * BUG: Justice randomly does the following:
  4557.   A: Doesn't work.
  4558.   B: Works
  4559.   C: Works but then awards a bonus spell on a creature that isn't supposed
  4560.      to give a bonus spell.
  4561.  
  4562.   IF (cell<0 or cell>=GAMESPACE) return
  4563.   cellp=&board[cell];
  4564.   cMR = cellp->char_stat.MR - MD;
  4565.  
  4566.   The above code sequence looks innocent enough.  But in fact is the work
  4567.   of EVIL.
  4568.  
  4569.   It was causing all the random errors of Justice, Dark Power, Vengeance,
  4570.   Exorcise etc.  There is a ; missing from the end of the first line
  4571.   therefore the 2nd line was never being executed.  NOW FIXED.
  4572.  
  4573.  
  4574. ************************************************************************
  4575.                          IFF Gadgets
  4576. ************************************************************************
  4577.  
  4578. The IFF gadget loading code:
  4579. Each gadget will be an IFF brush.  I must load each of these brushes into
  4580. an image struct.
  4581.  
  4582. 1. Open the IFF-file.
  4583. 2. Determine its x and y size.
  4584. 3. Allocate the memory for that
  4585. 4. Read it in and set up the struct Image for it.
  4586. 5. Poke these values into the gadget struct.
  4587.  
  4588. IMAGES:
  4589. 1. X
  4590. 2. Check
  4591. 3. Start
  4592. 4. Quit
  4593. 5. QuestionMark
  4594. 6. EndTurn
  4595. 7. RightHandSide (The texture of the right hand side of the board)
  4596.  
  4597. The right hand side thing is not really a gadget.  Its just a brush.  All
  4598. gadgets are brushes but not all brushes are gadgets.
  4599.  
  4600. GadgetImage[0] will be unused.
  4601. GadgetImage[1] to [7] will be used.
  4602.  
  4603. GadgetData[0] will be unused
  4604. GadgetData[1] to [8] will be pointers to the image data.
  4605.  
  4606. The data areas will each be a different size for each gadget.
  4607. So how do I handle the memory allocation and deallocation for all these
  4608. differently sized images?
  4609.  
  4610. A: Use AllocRemeber()  (Might cause some extra memory fragmentation)
  4611. B: Use AllocPool() (I heard this was bugged on OS 3.0 but there is no
  4612.    mention of any bugs in the OS 3.1 DevCD.)
  4613. C: Have another array of ints for the size of the data GadgetDataSize[0] to [7]
  4614.  
  4615. * I choose option C.  It seems easy enough.
  4616.  
  4617.  
  4618. Sept. 17th, 2000:
  4619. I have the gadgets in but the end turn gadget and question mark gadget have
  4620. a big black box around them.  There is no way to specify that color #0 (or
  4621. any other color) should be transparent.  This makes the right hand side
  4622. look awful.
  4623.  
  4624. Possible Solutions:
  4625. A: Write a special rendering hook function for my gadgets to draw them with
  4626.    the blitter in such a way as not to destroy the background.  I don't
  4627.    really know how to do this though.
  4628. B: Switch to using GadTools.library (I assume that gadtools gadgets can be
  4629.    specified as having a transparent color 0)  I don't know anything about
  4630.    gadtools though.
  4631. C. Simply redo the gadgets such that they have the backdrop built into
  4632.    themselves.  This is the easiest thing to do.  This also means that if
  4633.    someone redraws the right hand side then they must also redraw the
  4634.    EndTurn, QuestionMark and Mount gadgets to fit.
  4635.  
  4636. I will do C since I don't have to read any documentation or figure out
  4637. any paremeters or anything.
  4638.  
  4639. * Included Xav's new French versions of the Start and Quit gadgets.
  4640.  
  4641. * The game is now 99% playable in French.  Everything except the menus and
  4642.   docs has been translated.
  4643.  
  4644. * Added in those 2 gadgets for the hires screen.
  4645.  
  4646. * REMOVED the old hardcoded TickImage and CrossImage from Init.c/Init.h
  4647.  
  4648. ************************************************************************
  4649.                          End IFF Gadgets
  4650. ************************************************************************
  4651.  
  4652. * I antialiased Xav's new rotating Generator and included it into the game.
  4653.  
  4654. * Version 3.0 completed on September 20th, 2000.  It contains 904 tiles.
  4655.   Size of 3.0d executable is 339564 bytes.
  4656.   3.0d consumes 10.3 megs of hard drive space.
  4657.  
  4658. * UPLOADED v3.0d to Aminet on Thursday, September 21st, 2000.  My internet
  4659.   account has only been giving me around 300 cps lately, but I got 1100 cps
  4660.   while uploading chaos!  It's a miracle!!!
  4661.  
  4662.  
  4663. September 24th, 2000: Frédéric writes:
  4664. > * I cast "stone to flesh" on one of my dark wood trees and moved it next to
  4665. > an independent ghast. However, it did not get engaged to the ghast and I
  4666. > could not attack it on the same turn.
  4667.  
  4668. I could not exactly duplicate this bug.  When I moved my Dark Wood next
  4669. to any enemy it got engaged, however when I clicked on the enemy to attack
  4670. it, no sound was made and the graphical attack effect was not shown.
  4671. The attack actually did happen though.  The enemy lost the appropriate
  4672. 2 hit points.
  4673.  
  4674. This was caused by code that suppressed the attack sounds & gfx for the Dark
  4675. Wood (so as not to get boring and annoying when its SpecialCombat attacks 8
  4676. adjacent enemies).  I tweaked the code to only suppress the combat sound
  4677. and graphical effect when the Dark Wood is inanimate.  NOW FIXED.
  4678.  
  4679.  
  4680. * INTEGRATED Frédéric's improved asm music routines into the game.  The
  4681.   music system now resides in the dir AsmMusicSystem/
  4682.   I didn't know what to do with the file proplayer.a so I just left
  4683.   it out.  Everything seems to work ok but the subsong bug is still there.
  4684.   I did a simple memory leak test and a simple mungwall hit test.
  4685.   Everything seems ok.  We can now allegedly play MMD2 songs from Octamed
  4686.   Sound Studio Professional from 1 to 64 channels.
  4687.  
  4688. * FLAW: When you select a spell from your list, the erased area is 1 pixel
  4689.   to big.  NOW FIXED.
  4690.  
  4691. * ADDED part of the code to support PlayByEmail.
  4692.  
  4693. -----------------------------------------------------------------------
  4694. Problems caused by a bug in RestoreCellWizard() (It wasn't doing a BackUp()
  4695. it was just overwriting whatever was there)
  4696.  
  4697. * When the mount of a wizard is killed, it leaves no corpse behind.
  4698.   Tested and works perfectly.  NOW FIXED.
  4699.  
  4700. * When a wizard dismounts something onto a scroll, the scroll is destroyed.
  4701.   NOW FIXED.
  4702.  
  4703. * Above fix causes collapsing meditations to reappear once the wizard moves
  4704.   off of them.  NOW FIXED.
  4705. -------------------------------------------------------------------------
  4706.  
  4707. Frédéric bug reports for v3.0 +++++++++++++++++++++++++++++++++++++++++++
  4708. > * I had saved the preferences with Music off, but when I restarted the game,
  4709. > the music was switched back on. However, the menu "Music" was unchecked.
  4710. > When I selected it, another module was restarted, then I could switch the
  4711. > music off by reselecting the item. Seems you forgot to read this preference
  4712. > item before starting the music.
  4713.  
  4714. NOW FIXED.
  4715.  
  4716. > * The left amiga key acts as "q". Actually, I guess every keypress of a
  4717. > qualifier triggers the very last action done on the keyboard.
  4718.  
  4719. This was caused by the fact that MapRawKey() maps qualifier keys as
  4720. nothing.  That is it doesn't even put a 0 into the buffer.  So the buffer
  4721. was left holding whatever key was pressed last.  NOW FIXED.
  4722.  
  4723. END Frédéric bug reports for v3.0 ++++++++++++++++++++++++++++++++++++++++
  4724.  
  4725.  
  4726.  
  4727. WARNING:  You should not use illegal hacks of the "Automatically activate
  4728. any screen that is ever in front" variety.  This is simply improper and
  4729. just won't do.  Hacks like this will not crash Chaos but they will cause it
  4730. to behave in an annoying manner since hacks of this nature will constantly
  4731. activate the WRONG screen.  Do not use "AutoActivate FrontMost Screen" hacks.
  4732.  
  4733. Failure to heed the above warning may cause the screen scrolling to stop
  4734. working.  This will prevent you from reading certain lengthy spell
  4735. descriptions.
  4736.  
  4737. MCP has such a hack.  It should be turned off when playing Chaos.
  4738.  
  4739.  
  4740. * FIXED that rawkey problem on the 2nd creature info panel that prevented
  4741.   screen grabbing! (Pressing ANY key at all was clearing the screen).
  4742.   NOW FIXED.
  4743.  
  4744. * STUPID: Computer wizards senselessly cast Dark Wood trees adjacent to
  4745.   themselves.  I have now implemented more advanced AI for use with this
  4746.   particular spell so this is NOW FIXED.
  4747.  
  4748. * Several new predicates to support the new AI:
  4749. int AdjacentFriendlies(int source, int cell);
  4750. int AdjacentEnemyUndeads(int source, int cell);
  4751. int AdjacentFriendlyUndeads(int source, int cell);
  4752. int AdjacentEnemyWizards(int source, int cell);
  4753. int AdjacentFriendlyWizards(int source, int cell);
  4754. int AdjacentEnemyUndeadWizards(int source, int cell);
  4755. int AdjacentFriendlyUndeadWizards(int source, int cell);
  4756.  
  4757. * INTERLACE PROBLEM:  Sometimes AGA users complain that certain chaos
  4758.   screens are in interlace.  They want to make use of their AGA chips
  4759.   + their multisync monitors to produce a 100% solid flickerfree display.
  4760.   So I have now added a new cli startup option -d to force chaos to open
  4761.   all its screens in doublepal mode.  I also added a new startup script and
  4762.   icon so chaos can easily be started in DoublePal mode from now on.
  4763.   DoublePal modes are noninterlaced and flicker free.  NOW FIXED.
  4764.  
  4765. * ADDED Polski, Norsk, Svenska and Finnish to the language menu.
  4766.  
  4767. Complete info on Polish fonts and charsets is at
  4768. Aminet:docs/misc/PolishCharset.lha
  4769. --------------------------------------------------------------------------
  4770. September 27th, 2000: I _finally_ got a finished polski.catalog from Artur.
  4771.  
  4772. Here are the problems:
  4773. Scavenge -> Padlinoûerca is too long.  Can you think of a shorter word?
  4774. Scierwojad, Padlinozerca, Sëp (bird that eats dead animals), Mordobocie.
  4775. Padlinozercy (plural noun),
  4776. Fei says: Zerowac with dotted Z is a verb that is what I want.
  4777.  
  4778.  
  4779. Ranged Combat -> Walka Na Dystans is too long.  What is polski for "Shoot"?
  4780. Maybe "Shoot"->Strzelac or Strzal or Strzelanina would work better?
  4781. Or perhaps WalkaNaDystans?
  4782. Strzal for Shoot is what fei says to do.
  4783.  
  4784.  
  4785. Magic Resistance -> Odpornoôê Magiczna is too long.  How about
  4786. "Magic Resist" or "Resist Magic"? ??
  4787. Przeciwmagia=AntiMagic, Odpornosc na magie
  4788. Odpornosc mag. is the way fei says to do it.
  4789.  
  4790. ---------------------------------------------------------------------------
  4791.  
  4792. * ADDED new code to make the top half of the 2nd creature info panel fully
  4793.   stringwidth sensitive. (I had already done this with the bottom half).
  4794.   This allows the Polski translations to fit without overlapping. DONE.
  4795.  
  4796. * ADDED new code to make the text on the score screens fully stringwidth
  4797.   sensitive.  This allows the polski translations to fit without overlapping.
  4798.   The numeric columns are unchanged.  Seems to work ok.
  4799.  
  4800. * Implement translated menus:
  4801.   1. Make the strings into the catalog file and defines.h
  4802.   2. Change ChangeLanguage() to put in the correct text via Message(M_?) into
  4803.      each of the menu fields.
  4804.   3. Calculate the length of the menu name and of the longest string in the
  4805.      menu.
  4806.  
  4807.   The Intuition menus are now fully international and automatically adjust
  4808.   to the length of the strings in the menus.  ALL DONE
  4809.  
  4810. * Added code to center the translated strings of the demo over screen. DONE.
  4811.  
  4812. * Fixed spell descriptions for Hydra, Flood Shield, Marid and Protection.
  4813.  
  4814. ***********************************************************************
  4815.                 THE LINKER HAS ATTACKED ME AGAIN!!!
  4816. ***********************************************************************
  4817.     SLINK WITH temp_smk.tmp
  4818. Slink - Version 6.58
  4819. Copyright (c) 1988-1995 SAS Institute, Inc.  All Rights Reserved.
  4820.  
  4821. Error 502: _sprintf symbol - Distance for Reloc16 > 32768
  4822.  
  4823.   First Reference in Unit cast.c at offset 00003a04 in file 'cast.o'
  4824.   To Unit sprintf.c at offset 00001690 in file 'LIB:scm.lib'
  4825.   Caused by line 1929 in file cast.c
  4826.  
  4827.  
  4828.  
  4829. I added 200 lines of new code to cast.c today.  And this error started
  4830. happening.
  4831.  
  4832. I read the docs.  They say to compile the file with code=far.  But I
  4833. already do that.  I got this same error or a very similar one a few months
  4834. ago so I had to add code=far to the compilation of cast.c.
  4835.  
  4836. The docs also say that you can "declare the function to be far".  But
  4837. changing stdio.h prototype of sprintf sounds like a very bad idea.
  4838.  
  4839. So I tried to compile the whole thing with code=far.  I changed stdops to
  4840. include code=far so that ALL modules would be compiled with cod=far.
  4841. Then I did smake clean smake.  It all had no effect.
  4842.  
  4843. The docs say scm.lib is a lib of floating point stuff.  But I don't do any
  4844. sprintf floats in cast.c so I just totally don't understand this whole
  4845. entire thing.  The sprintfs in cast.c are all %s or %d.
  4846.  
  4847.  
  4848. So what am I supposed to do????
  4849.  
  4850. As far as I am concerned this must be a bug in the compiler or linker.  I
  4851. am compiling cast.c with code=far therefore there should simply not be any
  4852. 16-bit branches in it.  Therefore I should not ever get any 16-bit branch
  4853. errors.
  4854.  
  4855. Solution: Remove a bunch of code out of cast.c to make the code smaller.
  4856. I am transferring all routines having to do with scoring and sorting cells
  4857. for intelligent pit casting purposes into a new module IntelligentPitCast.c
  4858. This has the code for intelligent Pit, Magic Glass and Weak Wall casting.
  4859.  
  4860. This problem will probably resurface the next time I add in a bunch of new
  4861. spells.
  4862.  
  4863. Oh great!  Now the compiler says I have conflict between 2 variables!
  4864.  
  4865. I have
  4866. static int id;  in cast.c
  4867. static UWORD id; in IntelligentPitCast.c
  4868.  
  4869. and it says these vars are conflicting with each other!!!
  4870.  
  4871. This is scary!  They are supposed to be 2 completely different vars,
  4872. each local to their own file!
  4873.  
  4874. newl tested this same type of thing on gcc and it worked perfectly,
  4875. exactly the way that it should.  The 2 id vars were each completely
  4876. different and independent of each other and it compiled perfectly.
  4877.  
  4878. That's 2 major SASC bugs in 1 week! :(
  4879.  
  4880. Ok I have hacked and slashed my IntelligentPitCast.c code to only share
  4881. the vars that are absolutely needed in order to work around this evil bug.
  4882.  
  4883. But this could cause other very serious problems now, or in the future
  4884. (when I add another intelligence module) :(
  4885.  
  4886. Arrgh!  Now I'm getting multiply defined symbols.  It says every function
  4887. in IntelligentPitCast.c is multiply defined.  Ok this is because I had in
  4888. cast.c:
  4889. #include "IntelligentPitCast.c"
  4890. instead of the correct
  4891. #include "IntelligentPitCast.h"
  4892. So this variable conflict wasn't a bug after all!
  4893.  
  4894. But that Reloc16 > 32768 thing is still a bug in the compiler.
  4895.  
  4896. ***********************************************************************
  4897.                END THE LINKER HAS ATTACKED ME AGAIN!!!
  4898. ***********************************************************************
  4899.  
  4900. * Installed the new HUPL versions of all the fonts.  These are the standard
  4901.   gamefonts modified by Attila the Hun to have all Hungarian chars in the
  4902.   proper places and then modified by Frédéric Delacroix to contain all Polish
  4903.   chars in the proper places.  I then had Sau test the ChaosPearlHUPL font on
  4904.   his Amiga in Hungary using a Hungarian keymap and he reports all chars are
  4905.   there and everything is ok.
  4906.  
  4907.  
  4908. * New function to support the new AI: FirstAdjacentHumanAlly()
  4909.  
  4910. October 7th, 2000:
  4911. * FLAW: Deutsch.catalog on 2nd scroll info panel goes off the right edge of
  4912.   the screen.  Everything was working great with the English, Français and
  4913.   Polski catalogs But when I got the Deutsch.catalog it was going off the
  4914.   right-hand edge of the 2nd scroll info panel.  I have now changed that
  4915.   panel so that the left column is right against the left edge and the right
  4916.   column is right against the right edge.
  4917.  
  4918. * Goblin Bomb now picks up bows just like a regular Goblin.
  4919.  
  4920. October 8th 2000:
  4921. * Compiled v3.01d for Robin.  The main executable is 349900 bytes!
  4922.  
  4923. ######################### GOBLIN BOMB VOTING ##################################
  4924. Vote: If you shoot a scroll of a Goblin Bomb, do you want it to explode?
  4925.  
  4926. You may vote     for it to explode (+1 point)
  4927. You may vote against it to explode (-1 point)
  4928.  
  4929. Or any number in between.
  4930.  
  4931. James: +.25
  4932. Sean:  +.8
  4933. Joseph: -1
  4934. Zoltan: -1
  4935. Frédéric: -.75
  4936. Xavier:   -.25
  4937. JJ:     -1
  4938.  
  4939. Total: -2.95
  4940.  
  4941. * Changed/fixed Goblin Bomb to no longer explode when shot. October 11, 2000
  4942.  
  4943. * Also fixed it so that:
  4944. * Shooting a scroll of an Earthquake, Generator, Stone Golem or Stone Giant
  4945.   no longer shakes the screen.
  4946. * Shooting a scroll of a Hidden Horror no longer causes a Red Dragon to
  4947.   appear.
  4948. * Shooting a scroll of an Elemental no longer causes it to become its
  4949.   Elemental Form (water, fire, tempest, earthquake)
  4950. ####################### END GOBLIN BOMB VOTING ################################
  4951.  
  4952.  
  4953.  
  4954. **************************************************************************
  4955.                       BEGIN Ruthlessness Mode
  4956. **************************************************************************
  4957.  
  4958. When Ruthlessness mode is activated computer players will:
  4959. 1. Cast pits, magic glass, walls, rocks and miner willy more intelligently
  4960.    and aggressively.
  4961. 2. If they are an arborist they will cast shadow wood and dark wood trees
  4962.    in a more aggressive and intelligent manner.
  4963. 3. Whenever a creature is engaged it will always attack the strongest
  4964.    creature that it can acutally kill.  If it cannot make a kill then it
  4965.    will attack whichever enemy it feels is the most dangerous.
  4966. 4. A shooting creature will always attempt to shoot the strongest creature
  4967.    that it can actually kill.  If it cannot make a kill then it will shoot
  4968.    whatever enemy it feels is the most dangerous.  They never try to
  4969.    shoot a wizard who is inulnerable or has a reflector.
  4970. 5. A nonengaged ground creature will always check first if there is a path
  4971.    to any enemy wizard that it can kill.  If it cannot kill any enemy wizard
  4972.    then it will check if there is a path to any favorite-food creature that
  4973.    it can kill.  If it cannot kill its favorite food then it will check
  4974.    if there is a path to any bonus-spell creature that it can kill.
  4975.    If it can find a path to one of those things then it will charge
  4976.    after it and kill it!
  4977.  
  4978.  
  4979. * Implemented new AI code for ruthlessness mode.  Now ruthless computer
  4980.   players will cast pits, magic glass, walls, rocks, miner willy, shadow wood
  4981.   and dark wood trees in a much more intelligent and aggressive manner.
  4982.   This took 600+ lines of code and quite a lot of time.  It added 7k+ to the
  4983.   size of the executable.
  4984.  
  4985. * Conducted various tests of the new ruthless casting code.  Everything
  4986.   seems to work ok.
  4987.  
  4988. * Implemented new AI code for ruthlessness mode. Now computer shooters
  4989.   shoot the strongest thing that they can kill.  If there is a tie then they
  4990.   shoot the most dangerous opponent.  Wizards will not shoot and kill a
  4991.   creature protected by Eye for an Eye.
  4992.  
  4993. * Conducted various tests of the new shooting code.  Seems to work ok.
  4994.  
  4995. * Implemented new AI code for ruthlessness mode.  Now engaged computer
  4996.   creatures attack the strongest thing they can kill.  If there is a tie then
  4997.   they attack the most dangerous opponent.  Wizards will not attack and kill
  4998.   a creature protected by Eye for an Eye.
  4999.  
  5000. * Conducted various tests of the new engaged attacking code. Seems to work ok.
  5001.  
  5002. * Implemented new AI code for ruthlessness mode: flying nonengaged creatures
  5003.   attack the strongest thing they can kill.  If they can't kill anything then
  5004.   they attack the most dangerous thing they can hit.  If there is nothing
  5005.   they can hit from their current position then they fall back to the old
  5006.   movement routine.
  5007.  
  5008. * Conducted various tests of the new nonengaged flying attacking code.
  5009.   Seems to work ok.
  5010.  
  5011.  
  5012. Implement ground-based nonengaged creatures seek a good kill. (wizard,
  5013. favorite food or bonus spell creature).  If they can't do any of those
  5014. things then they just fall back to the old movement routine.
  5015.  
  5016. I spent 2 hours thinking up an algorythm to allow creatures to find their
  5017. away around ANY set of obstacles to reach a desired goal.  I came up with a
  5018. recursive algorythm that would be ok for up to 6 movement points but it
  5019. would take several hours in the worst-cast scenario of 15 movement points
  5020. on an empty board on a 25 Mhz 030
  5021.  
  5022. So then I spent 1 hour thinking up a split "search from both ends" strategy
  5023. which would do 2 6 mp recursive searches.  One from the source and one from
  5024. the destination.  This would have allowed all paths up to 12 movement
  5025. points to be determined and would only take a few seconds in the worst-case
  5026. scenario.  Actually, I just realized this totally would not work at all
  5027. because there can be multiple desired destinations...  so it would only
  5028. work if there was only 1 desired destination.
  5029.  
  5030. With optimizations for not retracing steps and not taking paths for which a
  5031. shorter route already existed I could do 7 mp search with no problem.
  5032.  
  5033. Then I spent 2 hours coding the above routine and I began to
  5034. realize how amazingly inefficient a recursive search was.  yuk...
  5035.  
  5036. So then I spent 3 more hours inventing a new search algorythm that is not
  5037. recursive and is amazingly fast!  It should be able to determine the BEST
  5038. path to all points on the board in around .025 seconds on 25 Mhz 030. If
  5039. the board was 4x larger than it currently is then it should take about .1
  5040. seconds.  6 more hours of coding and it was ready to be tested.
  5041.  
  5042. A couple of days later: well I had to make some adjustments and things to
  5043. make everything work within the realm of Chaos.  But now that it is done,
  5044. IT IS TOTALLY AWESOME!  I built some complicated mazes and then pressed the
  5045. "m" key and it correctly showed all the places I could and could not move
  5046. to!  I kept randomly deleting pieces of walls and putting new walls elsewhere
  5047. in an attempt to confuse it but it worked every time!  WAY COOL!
  5048.  
  5049. I had always been planning on optimizing the C code to make it go faster,
  5050. or to rewrite it in asm if needed but it goes SUPER FAST on the very first
  5051. try!  So there is really no reason to optimize it at the present time.
  5052. It is fundamentally a very efficient algorythm.
  5053.  
  5054. I can now theoretically program computer creatures to find a path to any
  5055. desired goal.  However each goal that is searched for will have to be
  5056. specially programmed in.
  5057.  
  5058. This algorythm only finds clear paths to every square on the board.
  5059. This algorythm does not currently try to calculate any sort of "hack your
  5060. way through these certain barriers to reach your goal" type of stuff.
  5061.  
  5062. This algorythm takes into account the fact that once you are engaged you
  5063. can attack any adjacent square, even if you only have .1 movement points
  5064. left.
  5065.  
  5066. * BUG: There has always been a bug in the game whereby if you move some
  5067.   squares and then have only .5 to .9 movement points left it lets you move
  5068.   another full square!  This is cheating!  It takes 1 whole movement point to
  5069.   move in a straight line and 1.4142 movement points to move diagonally!
  5070.   I have now changed the inappropriate occurrences of "0.5" in move.c and
  5071.   cmove.c to say "1.0" now.  However, you can still cheat and step diagonally
  5072.   on your last move when you only have 1 movement point left.  SORT OF FIXED.
  5073.   I will work out a way to fix this last flaw later.  Later: ok the
  5074.   movement system now works exactly the way it should. This is all 100%
  5075.   NOW FIXED.
  5076.  
  5077. * IMPROVED cmovenonengaged() to take an extra path parameter.  When this
  5078.   parameter is not NULL, the movement information comes from the path rather
  5079.   than the ChooseDestination() function.  This way anytime I have calculated
  5080.   a path for a creature to follow I just keep calling cmovenonengaged() to
  5081.   make it follow the path.  This way I am using the EXACT same movement code
  5082.   for both normal movement and path-following movement.  So everything
  5083.   should always work perfectly.
  5084.  
  5085. * Ok, I've got the path code in and working and computer-controlled
  5086.   creatures can now follow complicated paths to their destination.  As I
  5087.   watched a 14 movement-point Hydra navigate a complicated obstacle course on
  5088.   his way to kill a Generator I noticed the following 2 bugs in the old
  5089.   original computer movement routine:
  5090.  
  5091. * BUG: The computer movement routine deducts 2 movement points for each
  5092.   diagonal move instead of the correct 1.4142!  This applies to computer
  5093.   creatures AND computer wizards!  NOW FIXED.
  5094.  
  5095. * BUG: The WRONG movement point value is shown all the time.  It was taking
  5096.   the actual movement points left and rounding them DOWN to the nearest lower
  5097.   integer. NOW FIXED.
  5098.  
  5099. * Line 58 and 59 in the catalog file are no longer used.  They only showed
  5100.   movement points as (wrong) integers.  Line 91 is now used instead.
  5101.  
  5102.  
  5103. * Added code so that nonengaged exposed wizards will run into an unoccupied
  5104.   meditation if possible.
  5105.  
  5106. * Modified "m" key to work, even in the middle of a creature's movement!
  5107.   I've been wanting this feature for years!  I finally did it!  And now
  5108.   that I've fixed all those 10 year old bugs in the move routines the m-key
  5109.   highlighted squares now agree perfectly with the printed numerical value at
  5110.   the bottom of the screen and with how far you _actually_ get to move your
  5111.   unit.
  5112.  
  5113. * FIXED FindAllPaths() to handle mounts + level 2 mounts when the SourceCell
  5114.   contains an exposed wizard. (It already handled meditations).  DONE.
  5115.  
  5116. * FIXED "m" key ground movement to handle mounts and level2 mounts + ride.
  5117.  
  5118. * FIXED "m" key flying movement!  Just use the old code. DONE.
  5119.   (FindAllPaths is only for ground movement.)
  5120.  
  5121. * FIXED "m" key flying movement to take into account
  5122.   "WillIGetEngagedIfIMoveThere".  This way cells which you cannot directly
  5123.   fly to, but you can fly next to them, become engaged and then attack them
  5124.   will now be correctly highlighted.
  5125.  
  5126. * Modified io.c to load/save Ruthlessness var finally.
  5127.  
  5128. At the beginning of the Ruthlessness upgrade cmove.c was 24.5k in size.
  5129. Now it is 61.5k!
  5130.  
  5131. **************************************************************************
  5132.                       END Ruthlessness Mode
  5133. **************************************************************************
  5134.  
  5135.  
  5136. Robin Schmidt writes:
  5137. > The Pyrohydra has combat 15 and ranged combat 5.
  5138. > But the discription tells me that the breath fire of the pyrohydra is one
  5139. > of the strongest. I suppose you swaped the numbers?
  5140.  
  5141. Wow!  What a cool bug you found!  I swapped the numbers back around.
  5142. NOW FIXED.
  5143.  
  5144.  
  5145.  
  5146. > 1. When questioning a cloaked object, the German text is too long.
  5147. > We need a line feed + carriage return 8-)
  5148.  
  5149. It took me 90 minutes to hack and slash an AntiAliasWriteTextLength()
  5150. function together for this purpose.  NOW FIXED.
  5151.  
  5152.  
  5153. > Just had a game: I played with four wizards in my team against four computer
  5154. > wizards and four generators. Everything enemy to me is destroyed. I attached
  5155. > the savegame. When I cast the seperation spell the fight can go on, but why
  5156. > doesn't the game finish now? My team has won!
  5157.  
  5158.  
  5159. Team/Alliances and ending the game.
  5160.  
  5161. End of Game Check will do:
  5162. IF (everyone alive on the board is on the same team) THEN
  5163.    IF (all of those people were ORIGINALLY on the same team at the start of the game) THEN
  5164.       (The game is over, that team wins!)
  5165.    ELSE
  5166.       ? FD says to do nothing because this can make the game last a very
  5167.         long time and force a player to sacrifice multiple dragons via
  5168.         Justice/DarkPower/Vengeance in order to get bonus spells that allow
  5169.         for killing an unwanted reflectorized allied wizard.
  5170.    END_IF
  5171. END_IF
  5172.  
  5173. * Above code implemented.
  5174.  
  5175. * BUG: Team[] gets saved and loaded with the savegame file but not
  5176.   TeamSettings[]!  I have now fixed this, this means the savegame format
  5177.   has changed again.  I am deleting all my old saved games and I am
  5178.   converting all the levels to the new format. NOW FIXED.
  5179.  
  5180.  
  5181.  
  5182. > 2. The Nightmare has a combar value of 1? I think it should be higher, for
  5183. > 'it's feet are burning hot' or something like that.
  5184.  
  5185. I just deleted the sentence
  5186. "They attack with their hooves which are burning hot."
  5187. from the spell description so this is NOW FIXED.
  5188.  
  5189. Of course now I will have to convince all the translators around the world
  5190. to upgrade to the new spell description... 8/
  5191.  
  5192. > 3. I cast the Dead
  5193. > Revenge spell on my wizard and he is killed. Now the game asks if I really
  5194. > want to play on or start another game ('Do you really want to start a new
  5195. > game?')! I say no and see the generator - MY generator. But my old monsters
  5196. > are asleep, I cannot do anything. And with the end of the next turn the game
  5197. > asks again: Do you want to go on? Nay, me says and lo! there my generator
  5198. > produces a Goblin for me. I can DO something - I can MOVE. But anyway the
  5199. > game asks me if I want to play another game. Then I reached turn 24 and
  5200. > everything was out - strange tale, isn't it...;-)
  5201.  
  5202. hahahahheheehheha this sounds very funny! 8)
  5203.  
  5204. Here's the deal: When all human wizards are dead the game is supposed to be
  5205. over.
  5206.  
  5207. Dead Revenge
  5208. lets you have some small amount of influence in the game so long as there
  5209. are other human players in the game.  This presumably allows you to take
  5210. some revenge on the human wizard who killed you so that (hopefully) you can
  5211. weaken him and make some other human player or computer player or even the
  5212. independents win.
  5213.  
  5214. You are the very first player (besides myself) to test the new Dead Revenge
  5215. spell.  For years Dead Revenge didn't let you take ANY revenge at all!  It
  5216. just let you die and then gave the _independents_ a new generator in your
  5217. place!  If you died at the hands of the independents then this was doubly
  5218. unjust!
  5219.  
  5220. If you aren't going to play Chaos with all those visitors at your house
  5221. then you could try playing where you yourself control 2 different wizards
  5222. on a team against 4 computer wizards on a team.  In such a game the Dead
  5223. Revenge spell would work as you would like it too. (Although there is a
  5224. theory espoused by certain Chaos Players that says something about it being
  5225. a bad idea to let your wizard die in the first place 8)
  5226.  
  5227. Btw: Frédéric wants me to somehow rig the replacement generator to have a
  5228. chance of generating your wizard back into the game.  I haven't really
  5229. worked out how that would work yet....  I am thinking that after X number
  5230. of turns it would automatically generate your wizard back into the game.
  5231. I'm thinking a number like X=20 would work well.  I think this would be
  5232. unbelievably cool in a large multiplayer game.
  5233.  
  5234.  
  5235. > Another question: When calling the About window it says: 'Return Of The
  5236. > Wizards'? Why?
  5237.  
  5238. I asked myself that same question the first time I saw it.
  5239.  
  5240. The answer is:
  5241. It is a reference to the facts that:
  5242. 1. There were powerful wizards in ancient times, but their knowledge was
  5243.    mostly lost over time.
  5244. 2. The game takes place in the far flung future when scientists have
  5245.    rediscovered and reinvented the magical powers that were once commonplace
  5246.    in Atlantis, ancient Egypt and other lost civilizations.
  5247.  
  5248. Didn't you ever wonder how the Pyramids were built?  Well its pretty darn
  5249. easy when you have complete control over a Brontasaurus.  Whole teams of
  5250. Brontasauri even.
  5251.  
  5252. But dinosaurs really eat a lot... and they severely overgrazed the land...
  5253. giant dust storms ensued... the entire area turned into a desert.  A
  5254. terrible ecological disaster from which they still have not recovered 5000
  5255. years later.
  5256.  
  5257. It says "Battle of the Wizards" in some places and "Return of the Wizards"
  5258. in other places.  I was thinking of having it say "Wizard Wars" or
  5259. "Strategy Game of the Century" or ?  But it seems ok like it is.
  5260.  
  5261. October 19, 2000:
  5262. * CHANGED spell descriptions of: Bat, Nightmare, Virtue.
  5263.   Sent them to FD and SF.  Included new FD French versions.
  5264.  
  5265. * ADDED code to keep track of total time spent playing chaos and total
  5266.   number of turns played.  Now I just have to decide where I will display
  5267.   this information.
  5268.  
  5269. October 20, 2000:
  5270. * Sent v3.01 to FD for betatesting.
  5271.  
  5272. * INCREASED the code to keep track of total time spent playing chaos to
  5273.   keep seperate totals for each of the 8 players + the independents.
  5274.  
  5275. * Added code to switch to the HUPL font when selecting Hungarian or Polish
  5276.   from the Language menu.
  5277.  
  5278. * Chaos release executable is now 368704 bytes in size.
  5279.  
  5280. * The toe of the Babboon is all messed up. NOW FIXED. + I drew some blood
  5281.   on the dead body. 
  5282. * Pieces of the Skeleton animation were not antialiased.  NOW FIXED.
  5283. * Amphisbaena is all messed up! NOW FIXED.
  5284.  
  5285.  
  5286. ********************* BEGIN Robin Stuff *******************************
  5287. Robin writes:
  5288. > 4. I think the Goblin Bomb makes it too easy to kill generators. Try it:
  5289. > Place a Goblin Bomb next to a generator. Shoot at it until it dies.
  5290. > Destroy the generator with any adjectant creature (even an orc).
  5291. > It's far too easy!?!
  5292.  
  5293. Well in a "real" game with say 8 generators it isn't so easy.  I mean,
  5294. first you have to _get_ the goblin bomb next to a generator.  This is easy
  5295. if your wizard is standing next to a generator but if you are standing next
  5296. to a generator in a normal game then you are probably going to get killed
  5297. very soon.  Perhaps this is why you like Dead Revenge so much? 8) hehehe
  5298.  
  5299. Ok so if you are a safe distance away then you have to walk your
  5300. Goblin Bomb up to the generator and it will be very challenging to get
  5301. him there without some independents killing him prematurely.
  5302.  
  5303. Also, I have found that it is quite challenging to get a Goblin Bomb into
  5304. position without at least taking some damage onto my own creatures.
  5305.  
  5306. And lets say that you are such a good tactician that none of what I have
  5307. just said applies to you.  Well its ok for it to be "easy" to kill 1 or 2
  5308. generators in a game.  Its the only way to survive when playing against 16
  5309. generators!
  5310.  
  5311. And lots of times I've had Goblin Bombs but no shooting creatures.  So I
  5312. get my Goblin Bomb into position and then some bozo comes along and kills
  5313. him!  Then they kill the generator!  So I don't get any bonus spells for
  5314. it!
  5315.  
  5316. > My dear, you talk too much. But what is most anoying - you are right. So we
  5317. > leave the topic.
  5318.  
  5319. > Now my great BUG!!!:
  5320. > Yesterday (or tomorrow, don't know) I got the Touch Of GOD (nice one 8-)! So
  5321. > I made my Wood Elf a godlike creature. A when it moved around killing here
  5322. > killig there killing everywhere it suddenly was promoted to a Dread Elf
  5323. > (ooohh, how dreadful)! But then I saw that his life force was decreased, and
  5324. > so were Magical Resistance and healing capabilities! That's no good, my
  5325. > dear. And I presume this 'feature' can be used with any promotable creature
  5326. > that is under the Armour and Protection spells. No other values were changed
  5327. > though, so my dread elf was still of much use to me...
  5328.  
  5329. Ok I read over the code that controls this and I see no possible way this
  5330. could happen.  All the stats are promoted the same way so they should
  5331. either all promote correctly or none of them should promote correctly.
  5332.  
  5333. So I played a test game and cast Touch of God onto my Wood Elf.  On the 4th
  5334. kill he was promoted to a Dread Elf.  The only thing wrong with him was
  5335. that his manuverability didn't promote right (I forgot to promote that stat
  5336. in the code).  So the Manuverability stat promotion is NOW FIXED.
  5337.  
  5338. The only thing I can figure is that your Dread Elf was attacked by a
  5339. creature (while you weren't looking) that caused the leben damage.
  5340. Possibly your Dread Elf was attacked by something holding a Poison Dagger,
  5341. that would mess up your leben recovery rate.
  5342. And that you just mixed up manuverability and magic resistance.
  5343.  
  5344. > NO! There
  5345. > was another thing I forgot to tell you: The Leben (you have to write it with
  5346. > a capital letter in German 'cause it's a noun...) value was increased by
  5347. > using the Armour spell (which was called by the Touch Of God, I think), and
  5348. > then, when I call the info panel, I see from the pictures, what happened to
  5349. > my elf (there were the Red Cross, the Shield, the Range Boost Arrow and...
  5350. > and the Armour). After he was promoted, there wasn't any Armour sign any
  5351. > more! Im totally sure about that!
  5352.  
  5353. The Armor sybmol is algorythmically generated each time you look at the
  5354. info panel.  If your life is 15 points higher than your normal maximum then
  5355. it draws the Armor symbol.  Several other symbols work in a similar
  5356. fashion.
  5357.  
  5358. So your Touched by God Wood Elf had probably taken a few hits during his
  5359. conquests right?
  5360.  
  5361. Lets say he had taken a few hits and was down to only 50 life points.
  5362.  
  5363. Well when he got promoted to a Dread Elf his normal life would be 39 life
  5364. points but he still keeps his 50.  50 is not 15 higher than 39 so it would
  5365. stop drawing the Armor symbol.
  5366.  
  5367. Dread Elves come with 39 life points built-in.  So for it to draw the Armor
  5368. symbol would require him to have 54 life points or more.
  5369.  
  5370.  
  5371. There are still lots of strange things in the game that you haven't found
  5372. yet. And some secret things too.
  5373.  
  5374. > I just found one: I made my Magic Wood
  5375. > walk via StoneToFlesh. I boosted it a little bit with some Combat training
  5376. > and tried to attack the next wizard. Well it worked fine, but then the
  5377. > wizard just entered my Magic Wood and disappeared! I could still move my
  5378. > Wood and attack, but the wizard remained in it. Some turns later my wood was
  5379. > destroyed from within by the evil wizard and he got a spell. :-(
  5380.  
  5381. Hehehehe
  5382.  
  5383.  
  5384. *************** END Robin Stuff ******************************************
  5385.  
  5386. *************** BEGIN Frédéric Stuff *************************************
  5387. FD Writes:
  5388. > I saw once (I think it was when a wizard had just been killed) a string
  5389. > like "Movement points= -98.50). I can't remember the exact circumstance
  5390. > unfortunately.
  5391.  
  5392. I looked over the code and I only saw 1 place where this could be
  5393. theoretically possible so I rewrote that piece of code.
  5394. ALLEGEDLY NOW FIXED.
  5395.  
  5396.  
  5397. > * Something has changed about shadow wood. It seems to me that they don't
  5398. > attack anymore when computer-controlled.
  5399.  
  5400. The code used to erroneously say (This used to let people cheat and move 1
  5401. extra square sometimes.)
  5402.         DO_WHILE (moveleft >= 0.5)
  5403.  
  5404. So I erroneously changed it to:
  5405.         DO_WHILE (moveleft > 1.0)
  5406. Which prevents things with exactly 1 movement point from moving.
  5407.  
  5408. Now I changed it to the proper:
  5409.         DO_WHILE (moveleft >= 1.0)
  5410.  
  5411. NOW FIXED.
  5412.  
  5413.  
  5414. > * I cast alter reality on a wizard's mount and it was turned into a
  5415. > goblin bomb. However, the goblin bomb did not explode when I killed
  5416. > it. It should explode, but should the riding wizard be harmed too ? I
  5417. > think so but ?
  5418.  
  5419.  That's hilarious!  You come up with the weirdest stuff! :)
  5420.  
  5421. 1. Goblin Bombs have never done the explosion effect on empty cells.
  5422.    I did not attempt to change this.  But someday I would like to have just
  5423.    *1* really BIG, 9-tile big (3x3) nuclear explosion animation that we can
  5424.    use as the cell effect animation for this effect.  Or actually it could be
  5425.    ANY animated explosion whatsoever.
  5426. 2. With clever rewriting of the Reinstate() function I was able to make
  5427.    mounted Goblin Bombs explode as usual.  NOW FIXED.
  5428. 3. Goblin Bombs have never harmed the cell that they are in. I have now
  5429.    hacked in some extra code so that they now damage a mounted wizard.
  5430.    Same thing for the Volcano.  NOW FIXED.
  5431.  
  5432. ****************** END Frédréric stuff *************************************
  5433.  
  5434. October 26, 2000: Sent a new v3.01 to FD for betatesting the AI.
  5435. Executable filesize = 368892.
  5436.  
  5437. Sent a new v3.01 to SAI for betatesting the AI.
  5438. Executable filesize = 386456  This means the level editing code is 17564
  5439. bytes in size.
  5440.  
  5441. =========================================================================
  5442. FD Writes:
  5443. > * I vanished a horse into the future, and it reappeared some turns later in
  5444.  
  5445. You vanished a horse??  Was this a really BIG, bad, scary horse or
  5446. something?  :)
  5447.  
  5448. > the rightmost column. But the drawn area was 1 pixel too wide, damaging the
  5449. > spell selection graphics. This was refreshed very quickly though. Actually,
  5450. > this seems to happen everytime something is drawn in the last column.
  5451.  
  5452. I think it only happens during the CellEffects TELEPORTIN and TELEPORTOUT.
  5453. NOW FIXED.
  5454.  
  5455.  
  5456. > * When a creature gets promoted, its manoeuvrability recovery is reset, not
  5457. > kept.
  5458.  
  5459. NOW FIXED.
  5460. ==========================================================================
  5461.  
  5462.  
  5463. October 29th, 2000:  I voted straight Libertarian.  I also voted against
  5464. the lame "Arena Proposal" to give millions of tax dollars to the Houston
  5465. Rockets & Comets basketball teams.
  5466.  
  5467. -----------------------------------------------------------------------
  5468. FD Writes:
  5469.  
  5470. > * A sleeping ghoul is still animated and scavenging. I can't remember
  5471. > exactly how it happened, but this could be due to impurities.
  5472.  
  5473. NOW FIXED.
  5474.  
  5475.  
  5476. > * If a computer wizard has a solar, then the solar does not move.
  5477.  
  5478. NOW FIXED.
  5479.  
  5480.  
  5481. > * I noticed that since you introduced the new dead revenge, when a creature
  5482. > changes side to that of a dead wizard (haunt or impurities), this wizard
  5483. > gains control of it, even though he did not cast dead revenge when he was
  5484. > alive. Is it a wanted effect ?
  5485.  
  5486. Yes, this is a wanted effect.  The new rule of the game is that if a
  5487. wizard owns things on the board that are not asleep or dead or a scroll
  5488. then he gets to use them as usual.  Even if the wizard himself is dead.
  5489.  
  5490. This is what allows Dead Revenge to be such a useful spell now.
  5491.  
  5492. > * Unless I missed something, when I cast a vortex on a corpse, the corpse is
  5493. > destroyed when the vortex moves. It should either be vanished, or left
  5494. > behind.
  5495.  
  5496. This is a game secret.  Just because the corpse is not there when the
  5497. vortex moves does not mean it is destroyed.  Can you figure out where the
  5498. corpse has gone?
  5499.  
  5500.  
  5501. > * In one of the first emails we exchanged, you told me you'd change the
  5502. > magic knife to improve combat by only 2 points instead of three so that it
  5503. > is really different from magic sword. It seems to me it still adds 3 points.
  5504.  
  5505. Someone must have cast vodka on you again.  You are imagining things again
  5506. :)
  5507.  
  5508. Wait till you sober up then try casting Magic Knife again and you'll see
  5509. that it works properly. :)
  5510.  
  5511.  
  5512. > * It would be nice, in the bonus panel, if the number of spells to pick was
  5513. > decreased each time I pick a spell.
  5514.  
  5515. NOW DONE.
  5516.  
  5517. > * During spell selection, when I press "c", it shows me where I can cast the
  5518. > spell under the mouse pointer. But then I must click elsewhere to be able to
  5519. > press "c" again on another spell. It would be nice if we could press "c" on
  5520. > different spells without having to click in between.
  5521.  
  5522. This is a problem with _all_ keypresses, not just the "c" key.  Originally
  5523. I programmed all keypresses to work exactly the way you describe.  Then one
  5524. day Sean changed it.  I didn't like it but I assumed he had a good reason
  5525. for it so I decided not to mess with it until someone complained about it.
  5526. NOW FIXED.
  5527.  
  5528. END FD Writes.
  5529. ------------------------------------------------------------------------
  5530.  
  5531. * November 1, 2000: Sent v3.01d (19) to Artur Chlebek for testing the Polski
  5532.   translation of the .catalog file and the HUPL fonts and the Screens/Polski/
  5533.   The executable was 369192 bytes.
  5534.  
  5535. * Included Stephen's Magyar spell descriptions A-Z.  They still need
  5536.   to be spell-checked.
  5537.  
  5538. * Robin wants a special version with a time delay on what the wizards are
  5539.   saying/thinking during their spell-selection AI. Sent v3.01d (24) specially
  5540.   modified to him.
  5541.  
  5542.  
  5543. November 2, 2000:
  5544. Artur Writes:
  5545. > It seems that there is something wrong with support for HUPL fonts - I
  5546. > checked them in DPaint and all polish chars are OK and in proper
  5547. > "places". But Chaos doesn't seem to use them - only script font
  5548. > (ChaosHUPL) seems to be used when proper option is enabled. All other
  5549. > fonts (ChaosCalligraphy & ChaosPearl)  seems to be used in original
  5550. > versions - not their HUPL equivalents. :/
  5551. >> Can you give me an example string where the char is wrong and I will
  5552. >> check this.
  5553. > /"Name/ wybierz zakl_e_cie." (polish equivalent of "/Name/ select your
  5554. > spell.") - underlined "e" has some 2 dots on the top of it, while it
  5555. > should be a mix of "e" & ",".
  5556.  
  5557. The problem was that I closed the old fonts and opened all the new ones
  5558. correctly but that is not enough.  The fonts must be plugged into every
  5559. rastport and screen in the game.  NOW FIXED.
  5560.  
  5561. * Sent a new v3.01 (20) sto Artur for testing the fixed HUPL font support.
  5562.   executable filesize = 369668.
  5563.  
  5564. * FLAW: In Ruthlessness mode, flying creatures seem to take about 6x longer
  5565.   to move than in regular mode.  This is noticeable on my 25Mhz 030 but
  5566.   perhaps not noticeable on faster machines.  NOW FIXED.
  5567.  
  5568. * FLAW: The "m" key can take up to 1/3 of a second.  The above fix now
  5569.   makes the "m" key around 10x as fast (in other words, back to being as
  5570.   fast as it was supposed to be).
  5571.  
  5572. * FLAW: Computer creatures in Ruthlessness mode take up to 6x longer to
  5573.   decide who to shoot.  NOW FIXED.
  5574.  
  5575.  
  5576. FD Writes:
  5577. > * A (allied) computer wizard cast 3 pits around a generator in a corner. He
  5578. > had 5 pits left to cast, and he could do so around a generator on a border,
  5579. > but he chose to cancel the spell.
  5580.  
  5581.   He didn't actually cancel the spell.  He cast the wall pieces into
  5582.   various parts of your computer's memory :) This triggered jillions of
  5583.   enforcer hits on my machine.  This bug  happened when a computer player
  5584.   tried to surround something that was on the edge of the map.
  5585.   ALL NOW FIXED.
  5586.  
  5587. While watching the computer cast Weak Walls in FD's supplied autosave, at
  5588. first I thought that the computer was casting them a bit strangely.  He
  5589. could have cast just *1* pit into the upper left corner and that would have
  5590. completely blocked off 1 generator.
  5591.  
  5592. But then I carefully examined what the computer player did and I realized
  5593. that _EVERY_ wall that he cast blocked off a generator!  One of the walls
  5594. even blocked off *2* generators!  And all the generators that he blocked
  5595. were closer to him than that obvious one in the corner!  So he was actually
  5596. being rather intelligent about the whole thing.
  5597.  
  5598.  
  5599.  
  5600. > * When Virtue kills a bonus creature (white dragon, stone golem etc), no
  5601. > bonus spell is awarded.
  5602.  
  5603.   NOW FIXED.  Btw: There are only 3 bonus spell creatures that Virtue
  5604.   currently kills: White Dragon, Stone Golem and Air Elemental.
  5605.  
  5606. * FLAW: No points are awarded for killing creatures with Virtue.  NOW FIXED.
  5607.  
  5608. > * An independent red dragon was engaged to one of my undead inanimages, but
  5609. > he was also adjacent to my dragon nest, which was the only object he could
  5610. > attack. However, he did not attack the dragon nest, he just shot it. This
  5611. > makes me think he tried to attack the undead inanimage, which is stupid
  5612. > since the dragon is intelligent enough to see it's an undead.
  5613.  
  5614.   This is a flaw that has always existed.  NOW FIXED in both normal mode
  5615.   and Ruthlessness mode.
  5616.  
  5617.  
  5618. > * My wizard just vanished because of impurities ! First time I see this !
  5619.  
  5620. Actually the line of code that allowed impurities to vanish things was
  5621. commented out for some reason.  I have just now reinstated it.
  5622.  
  5623. > Actually, he was vanished by an independent chronomancer.
  5624.  
  5625. HOORAY for the Chronomancer!!!!!  He actually did something useful!  He
  5626. vanished your most valuable asset!
  5627.  
  5628. > The trouble is
  5629. > that 1) he has not reappeared for a very very long time. I guess this is
  5630. > because there are no empty cells on the board. They all have at least a
  5631. > corpse. 2) I don't have access to the menues to quit the game 3) What if the
  5632. > board was full of independents ? The game would never end and I would never
  5633. > get the chance to select a menu !
  5634. >
  5635. > * I'm now on turn 148 and my wizard still hasn't reappeared. He was vanished
  5636. > around turn 80 ! I'm including the autosave. I think this is because the
  5637. > world is full of corpses. The vanished objects should be given a chance to
  5638. > reappear on a corpse after, say, 10 turns, or in place of another (random)
  5639. > object that would be vanished in turn.
  5640.  
  5641. Ok I have investigated the WarpIn() code that controls the reappearance of
  5642. warped creatures and yes, indeed your problem was caused by all those
  5643. corpses.  Here is how the code worked:
  5644.  
  5645. After WARPTURNS have passed, each turn try ONCE to reappear the creature
  5646. onto the board.  This was done by randomly selecting a square on the board.
  5647. If the square is not TOTALLY EMPTY then too bad for you.  You don't get
  5648. another chance to reappear until the next turn.
  5649.  
  5650.  
  5651. So in your game if there were only 5 completely empty squares on the board
  5652. then you would have only 5 chances out of 238 of reappearing each turn.
  5653.  
  5654. Ok, I have now completely rewritten WarpIn() to do the following:
  5655. After WARPCOUNT turns have passed then the object in question WILL reappear
  5656. randomly onto some completely empty square.  If there are no completely
  5657. empty squares then the object WILL randomly reappear on top of some corpse,
  5658. thus destroying the corpse.  If there are no corpses anywhere on the board
  5659. then some random thing will be WarpOut()'ed then the object in question
  5660. will be WarpIn()'ed to that now empty square.
  5661.  
  5662. I tested this new code on FD's supplied savegame.  NOW FIXED.
  5663.  
  5664.  
  5665.  
  5666. > * When a creature which has +4 scavenging and only 1 point to heal, it's
  5667. > still displaying life +4.
  5668.  
  5669. I have adjusted it to show the amount that it actually scavenges.
  5670. Tested and works perfectly.  NOW FIXED.
  5671.  
  5672. While testing the new scavenging code I was playing a little test game.
  5673. A Goblin Bomb popped out of an independent generator.  So I was like
  5674. "Cool! I'm gonna kill it then kill the generator!"  Only 1 problem, I only
  5675. had 2 creatures.  My Goblin and Gorilla were close to the Goblin Bomb, my
  5676. Wizard was 4 squares away.  I had no shooters, no flyers and no creatures
  5677. that move more than 1 square on my list.  So I kept casting various Goblins
  5678. and Gorillas and as they marched up to the Goblin Bomb to kill it they
  5679. would get blown away by the independent Ogre Mage who had clear and easy
  5680. shots on anything between my wizard and the generator.  Ok so this was
  5681. hopeless for the next few turns.  Then suddenly I got a spell that I never
  5682. use: Request!  I carefully analyzed everything on my list... I had a LOT of
  5683. spells that are better than request.  I usually just discard Request.  But
  5684. I _REALLY_ needed a shooter or a flying creature or even just a reasonably
  5685. fast creature like a Centaur or Unicorn.  So I prayed and prayed for
  5686. something along those lines and then cast my Request.
  5687.  
  5688. > What creature did you get ?
  5689.  
  5690. If I would have got a Vulture, Eagle, Floating Eye, Unicorn, Centaur,
  5691. Bolter, Elephant, any form of cat, or any of a number of other creatures
  5692. then I could have killed the generator on that turn.  But nooooo... I got a
  5693. Ghoul.  Luckily Ghouls are undead so that it could survive the 3 or 4
  5694. squares he had to walk from my wizard to the Goblin Bomb + Generator.  So 3
  5695. or 4 turns later I was able to kill the Goblin Bomb and Generator.
  5696.  
  5697. So the moral of the story is: Even spells that one never uses, _can_ be
  5698. vital in certain rare situations.
  5699.  
  5700. * BUG: Using the "m" key on an engaged creature sometimes produces somewhat
  5701.   wrong results.  NOW FIXED.
  5702.  
  5703. Robin Writes:
  5704. > I tried the Brustroem's Browser spell.
  5705. > I used the spell and look into the different spell books. But when I
  5706. > wanted to choose a spell, the game did not let me choose from my list but
  5707. > from the list of player 2. I attached a savegame.
  5708.  
  5709. Ok the last time I fixed Burstroem's Browser I wrote the right code but I
  5710. put it in the wrong place.  This means that for the last 4 months the spell
  5711. has been letting people CHEAT and cast spells from other people's spell
  5712. lists!  NOW FIXED.
  5713.  
  5714. November 5th, 2000:
  5715. * Added the 7 yes/no type strings to all the .catalog files.
  5716.  
  5717. SAI writes:
  5718. > Speaking of the info panels I've recently decided it would
  5719. > be nice to be able to see the life of a creature by simply
  5720. > placing the mouse over it.
  5721.  
  5722.  How about at the bottom of the screen:
  5723.  Wizard 1 (Sean)  Life 19
  5724.  NOW DONE.
  5725.  
  5726. November 6th, 2000:
  5727. * Sent v3.02 to FD and SAI for further playtesting.
  5728.   Executable filesize = 370196
  5729.  
  5730. * Sent v3.02t (23) to SF for testing Hungarian font support, etc.
  5731.  
  5732. * The newsmedia is stupid. re: Election.
  5733.  
  5734. November 7th
  5735. * BUG: M key shows that I can attack undeads when really I can't. 
  5736.   NOW FIXED.
  5737.  
  5738. * FLAW: The scroll panel does not 100% handle spell descriptions that are
  5739.   not all on 1 line.  NOW FIXED.
  5740.  
  5741. * Added code WaitVBlank(2); to all the keypresses so that, for example,
  5742.   when you are holding down the "s" key to see where you can shoot, the
  5743.   flashing is more solid and pleasing to the eye.
  5744.  
  5745. * Made an archive backup of all English Spell Descriptions to
  5746.   sc:SpellDescriptionsBackup.lha
  5747.  
  5748. * Ran FD's ReflowSpells.rexx script on the English spell descriptions.
  5749.   It didn't flow them like I wanted.  It went well beyond the defined
  5750.   LineLength var.  So I changed the script a bit and now it flows EXACTLY
  5751.   like Cygnus Ed Professional does (Format/WithoutFill).
  5752.  
  5753. * Henceforth I will keep all spell descriptions with a max line length of
  5754.   77 chars.
  5755.  
  5756. * Casting Brain Boost on a creature with max intelligence now raises its
  5757.   intelligence recovery by 1 point.
  5758.  
  5759. * REWROTE Double and Triple spell descriptions to say that you cannot
  5760.   double or triple any spell which grants multiple attempts.
  5761.  
  5762. * BUG: When 3 lines of text are displayed in the bottom text area of the
  5763.   main screen, lines 2 and 3 overlap each other a bit.  NOW FIXED.
  5764.  
  5765. FD Writes: ------------------------------------------------------------
  5766. > * I was asked a very strange question: "comrade nobody, would it be OK for
  5767. > you if I put this weak wall there next to your nothing ?" :-D ROFL !
  5768.  
  5769. NOW FIXED.
  5770.  
  5771.  
  5772. > * The answer to the question that was accepted was "y" and not "o" as is
  5773. > supposed to be in french mode.
  5774.  
  5775. NOW FIXED.
  5776.  
  5777.  
  5778. > * Something is wrong with the cloak graphics, I'm always mistakening it as
  5779. > "X-ray" ! I cloaked an enemy golem !
  5780.  
  5781. Well I programmed a really nifty gfx system so that you can redraw any
  5782. spell that you don't like.
  5783.  
  5784. Btw: hehehe its very funny that you cloaked an enemy golem. :)
  5785. Your AI must have some bugs in it. :)
  5786.  
  5787. END FD Writes ----------------------------------------------------------
  5788.  
  5789. * CHANGED Wood Elf to require 5 kills to promote to Dread Elf.  After
  5790.   extensive playtesting I have come to the conclusion that a Dread Elf
  5791.   is just to powerful to be allowed after only 4 kills.  It should be
  5792.   changed to 5 or 6.  Btw: it was _originally_ 5 kills when Sean first
  5793.   implemented it so I'm just setting it back like it was.
  5794.  
  5795.  
  5796. While creating the new CellEffectList() function I noticed that the
  5797. algorythmic sound effects controlled by the menu option only apply to
  5798. independent creatures.  Thus you can turn off the algorythmic sound effects
  5799. of the independents but not of computer controlled wizards.  Should this be
  5800. changed?
  5801.  
  5802. * FLAW?: Turning off algorythmic sounds does not affect the sound of the
  5803.   standard algorythmic "attack" sound.  NOW FIXED.
  5804.  
  5805. Sunday November 12th:
  5806. I have gotten almost no work done since the election.  Al Gore is trying to
  5807. steal our election from us!  Using dastardly lawyer manuvers!  This is very
  5808. upsetting and the political chaos is worsening every day :(
  5809. I can't concentrate on programming under such conditions. :(
  5810.  
  5811. * Problem: Special combat attacks take too long when there are many special
  5812.   combat attackers on the board.  I made a new CellEffectList function and
  5813.   rewrote the SpecialCombatHandler so that all the special combat graphical
  5814.   effects of a particular creature happen simultaneously for up to 8x speed
  5815.   improvement.  NOW FIXED.
  5816.  
  5817. * Robin and FD want your artifacts to go back to NOBODY when your wizard
  5818.   dies (instead of having them fall asleep).  NOW DONE.
  5819.  
  5820. * Problem: Computer-controlled flying creatures keep choosing to attack
  5821.   earthquakes when they should really be attacking the nearby enemy
  5822.   creatures.  This is because earthquakes are set to have 15 combat for some
  5823.   reason.  I have now changed earthquakes to have 0 combat.  Is this ok?
  5824.   NOW FIXED.
  5825.  
  5826. * Added: FD's new EndTurnSelect.iff and QuestionMarkSelect.iff
  5827.  
  5828. * Edited / Antialiased QuestionMark.iff and QuestionMarkSelect.iff
  5829.  
  5830. * FD says Agents should be highlighted while casting spells.  I looked
  5831.   into this and there was already code to do this.  However they weren't
  5832.   highlighted until the instant that the spell was about to be cast.  I have
  5833.   now changed this so that the creature is highlighted immediately, before
  5834.   any text is printed to the screen.  Thus the creature will now be
  5835.   highlighted for a longer period of time, without making anything take
  5836.   longer and without slowing the game down any.  Hopefully this will be
  5837.   good enough.  NOW DONE.
  5838.  
  5839. * ADDED Highlighting of real Generators because I like the Agent
  5840.   highlighting so much.
  5841.  
  5842. Robin Writes:
  5843. > I found another flaw: When using the Move It spell you're suddenly able to
  5844. > move the Solar on your own account. That's not good my dear oh no...
  5845.  
  5846. Congratulations, you have discovered another game secret.
  5847.  
  5848.  
  5849. November 13th: I haven't heard from Xav in weeks.  I was going to ask FD to
  5850. call him on the phone or drive to his house to see if he was still alive or
  5851. not.  I was very worried about him.  But today I _finally_ heard from him!
  5852. He was in the hospital with an appendicitis!  He could have died! :(
  5853.  
  5854. * Random Bug: Sometimes when the game loads Mod.ChaosTheme1, infinite
  5855.   enforcer hits are generated and all the fonts are destroyed.
  5856.  
  5857. November 14th, 2000:
  5858. * Assembled FD's new misca.asm for the music system to hopefully fix the
  5859.   above bug.
  5860.  
  5861. In order to test the new music system bugfix I have decided to play a REAL
  5862. game of Chaos.  I normally either,
  5863. A: Never play a game of Chaos.
  5864. B: Only play default games of me vs. 1 wizard and 4 generators.  I usually
  5865. win these games in less than 24 turns.
  5866.  
  5867. Ok, so now I will try me vs. 1 cpu wizard and 99 generators, Texas
  5868. Trash'em, 99 spells.  Both the cpu wizard and I died on turn 1
  5869. 4 games in a row.  I never started with cloak or lich so it was pretty
  5870. hopeless for me.
  5871.  
  5872. Now I am trying me + all 7 cpu wizards in an alliance against 99
  5873. generators, Texas Trash'em, 99 spells.
  5874.  
  5875. Turn 1:
  5876. I cast Weak Wall and blocked off a few generators.  So did 2 or 3
  5877. of my Allies!  We've already blocked a bunch of generators!
  5878.  
  5879. Turn 2:
  5880. I cast Lich on my Wizard.  Now I can win!
  5881.  
  5882. * UNBELIEVABLY STUPID!  All wizards are in an alliance against 99
  5883.   generators.  One of the computer wizards cast Coercion on turn 3!  Now we
  5884.   are all going to get killed because of this!  NOW FIXED.
  5885.  
  5886. Well we can't defend ourselves now, so a different wizard gets killed every
  5887. turn.  I couldn't cast spells for 5 turns!  By the time I could cast a
  5888. spell to help my allies the last one was dead! (He had been cloaked and
  5889. recover boosted.)
  5890.  
  5891. * FLAW: There is never an exophagy icon on my powerups list.  NOW FIXED.
  5892.  
  5893. It is now turn 81 and I've never ever had a Recover Boost the entire game.
  5894. I did however get 2 Exophagy spells which I cast on my wizard and his
  5895. replicate.  I've decided that Exophagy provides more strategy than Recover
  5896. Boost.  Scavenging provides more strategy than Recover Boost also.
  5897.  
  5898. Well I haven't seen the random music bug in 81 turns so I guess its gone.
  5899. However this is not really a bonafide test because I usually play with
  5900. speech and sound fx on, but this time I have them turned off for speed.
  5901.  
  5902. Turn 83: I am turning the sound effects and speech back on.
  5903.  
  5904. Turn 92:
  5905. I killed 7 generators, a T-Rex and a Stone Golem on 1 turn and now I get to
  5906. pick any 9 spells out of a list of 30.
  5907.  
  5908. Then during my next turn, I attacked with my Ghost and the ghost sound got
  5909. stuck in an infinite loop!  And it was generating infinite enforcer hits!
  5910. Ok so I opened up a shell and typed "who", it said that cli 9 was running
  5911. the ChaosDigitalSoundSubProcess so I typed "break 9 c" and it stopped the
  5912. enforcer hits and the sound.  But now the game is in some sort of "not
  5913. accepting any input" mode so I can't do anything in the game. :(
  5914.  
  5915. During this game I was offered Dead Revenge on my Bonus Spell Selection
  5916. panel at least 10 times.  I never picked it though.  I had cast level
  5917. twice.
  5918.  
  5919.  
  5920. I theorize that JCsound has some sort of bug whereby if there is a CPU load
  5921. right at the moment of starting (or buffer switching) a sound sample then
  5922. there is a finite possibility that things can get hung up.
  5923.  
  5924. 2nd theory: Something about the computerized speech or the algorythmic
  5925. sound effects routine is corrupting the audio.device.
  5926.  
  5927. Anyone who can solve this mystery automatically receives the
  5928. "Hero of the Month Award"
  5929.  
  5930. Months later James Conwell finally solved this bug!  Oh that's me, thank
  5931. you. :)
  5932.  
  5933. * FLAW: The score column is not positioned well on the score screen.
  5934.   My score on turn 92 is 11602 thus placing it up against the Life value.
  5935.   NOW FIXED.
  5936.  
  5937. * FLAW: Score screen score column is WAY out of position when playing in
  5938.   Deutsch or Polski.  NOW FIXED.
  5939.  
  5940. * BUG: Load any saved game and look at the score screen.  The life totals
  5941.   have not been freshly calculated so they are wrong.  NOW FIXED.
  5942.  
  5943. On 14-Nov-00, Frederic Delacroix wrote:
  5944. > * Uncertainty suffers from the same flow as vanish did before you fixed it.
  5945. > If there are many corpses, it will almost never generate anything.
  5946.  
  5947. I changed this so that it can now generate onto empty squares or onto dead
  5948. bodies.  NOW FIXED.
  5949.  
  5950. Note that if the board is mostly full of "stuff" (creatures, inanimates,
  5951. growths) then Uncertainity will probably not generate anything for you.
  5952. Its something to do with some law of physics that says you can't have 2
  5953. things in the same space at the same time. 8)
  5954.  
  5955. November 16th:
  5956. Sent v3.03 to FD and SAI for playtesting.  Executable filesize is 371880
  5957. bytes.
  5958.  
  5959. END OF VERSION 3.03
  5960.  
  5961. * EDITED Magic Carpet and Chainsaw graphics a bit.
  5962.  
  5963. * PROBLEM: I hate the animation of the Bolter.  So I just now changed it to
  5964.   something else.  It is now somewhat better than before, but still not
  5965.   very good.  Someone needs to fix this up.
  5966.  
  5967. FD Writes:
  5968. > * A wizard just cast poison dagger on its own bolter. Considering that a
  5969. > bolter can never attack, this is kinda stupid.
  5970. NOW FIXED.
  5971.  
  5972. > * When dismounting, the "M" key shows a lot of places where I cannot move (I
  5973. > have wizard wings+speed but I can only move one square in this situation).
  5974. NOW FIXED.
  5975.  
  5976.  
  5977. * Aaaaaaugh!  Reveal was set to only be a ranking of 4!  This is why
  5978.   computer wizards never cast it on anyone!  I am now raising it to 44 so
  5979.   that, basically, if they _can_ cast it on an enemy then they will.
  5980.  
  5981. * Sean and Frédéric both hate the green square for cloaked creatures.  This
  5982.   same green square is also used to draw unexplored squares.  Also FD has
  5983.   complained that the Cloak graphic is easily confused with the X-Ray
  5984.   graphic.  So I have now drawn a new Cloak graphic which is used for 3
  5985.   things:
  5986.   1. As the graphic for the Cloak spell.
  5987.   2. As the graphic for a cloaked creature.
  5988.   3. As the graphic for an unexplored square.
  5989.  
  5990.   If you do not like this graphic then you are free to draw a better one
  5991.   and it will automagically appear in the game.
  5992.  
  5993.  
  5994. * CHANGED Earthquakes back to 15 combat and adjusted the
  5995.   DangerousnessRating() routine to ignore combat, ranged combat, etc.
  5996.   when rating an inanimate object.  I did this so that a person could
  5997.   theoretically cast No Grow then Stone to Flesh on an Earthquake and have
  5998.   a powerful max combat creature.  I realize this will hardly ever happen.
  5999.   But it only needs to happen once for it to be all worthwhile.
  6000.  
  6001. END OF VERSION v3.04 FOR TRANSLATORS!
  6002.  
  6003. BEGIN VERSION  v3.05 NEW SPELLS UPGRADE.
  6004.  
  6005. * ADDED 16 new spells including:
  6006.   1 artifact creature
  6007.   2 other normal creatures
  6008.   1 meditation object
  6009.  12 magic spells
  6010.  
  6011.  1. Global Thermonuclear War
  6012.  2. Conwell's Cow Catapult
  6013.  3. Heal
  6014.  4. Vox Angelica
  6015.  5. Vox Celestes
  6016.  6. Resurrection
  6017.  7. Magic Carpet
  6018.  8. Tribal Dance
  6019.  9. Chainsaw
  6020. 10. Shambling Mound
  6021. 11. Stomp
  6022. 12. Delacroix's Decloaker
  6023. 13. Night of the Living Dead
  6024. 14. Hand Grenade
  6025. 15. Feeble
  6026. 16. Martyr
  6027.  
  6028. As I feared, when I added these new spells I am now getting that silly
  6029. >32768 error so I quickly syphoned off all the agentcasting stuff into a
  6030. seperate file "AgentCast.c".  I did this because it looked very small,
  6031. simple, self-contained and easy to do.  But I guess that wasn't enough
  6032. because I am still getting the the following error:
  6033.  
  6034.     SLINK WITH temp_smk.tmp
  6035. Slink - Version 6.58
  6036. Copyright (c) 1988-1995 SAS Institute, Inc.  All Rights Reserved.
  6037.  
  6038. Error 502: _sprintf symbol - Distance for Reloc16 > 32768
  6039.  
  6040.   First Reference in Unit cast.c at offset 00003ad0 in file 'cast.o'
  6041.   To Unit sprintf.c at offset 00001690 in file 'LIB:scm.lib'
  6042.   Caused by line 1943 in file cast.c
  6043.  
  6044.  
  6045.  
  6046. Ok, I syphoned off the intelligent creature casting code into
  6047. IntelligentCreatureCast.c and now it takes longer to do a complete
  6048. recompile but at least it works.
  6049.  
  6050. November 20th, 2000:
  6051. * Chaos now has 365 spells!  1 for every day of an Earth year!
  6052.  
  6053. On my 1st test game I started with a Global Thermonuclear War spell!
  6054. Woohoo!  Even though it is only probability 5!
  6055.  
  6056. On my 2nd test game I started with 2 Magic Carpets, Heal and Tribal Dance!
  6057. Wow!  Its amazing how adding just a few new spells can immediately make the
  6058. game more interesting!
  6059.  
  6060. November 21st, 2000:
  6061. * Included Xav's new Feeble, Hand Grenade, and Tribal Dance gfx.
  6062.   I put Explosion and Kamikaze into gfx/UnusedGfx/ for future use.
  6063.   I edited his new Martyr graphic to show the Martyr hanging high up on the
  6064.   wall.
  6065.  
  6066. * I Made a new level: Equivalency1 to test all the new spells.
  6067.   It is 1 human-controlled wizard vs. 1 computer-controlled wizard.  Both
  6068.   wizards have an identical spell list.
  6069.  
  6070. * PROBLEM: When an archer loses his archery ability the arcing weapon
  6071.   effect is still drawn.  NOW FIXED.
  6072.  
  6073. * PROBLEM: When a creature that is normally not an archer, gains the
  6074.   archery ability, the straight-line weapon effect is still drawn.  I have
  6075.   now fixed this to make it draw the arcing weapon effect.  NOW FIXED.
  6076.  
  6077.  
  6078. November 28, 2000 SAI Writes:
  6079. > I liked the multiattack made by trees, ropers, fungi,
  6080. > etc. The only problem is that they make the attack
  6081. > sound even when there is nothing for them to attack.
  6082.  
  6083. NOW FIXED.
  6084.  
  6085.  
  6086. > The sound made by a computer controlled Shadow Wood
  6087. > is a nice "whoosh", but when a Shadow Wood controlled
  6088. > by a human player attacks, it is only the traditional
  6089. > attack sound.
  6090.  
  6091. I am playing a test game right now and both human and computer controlled
  6092. Shadow Woods are making the same whoosh sound.
  6093.  
  6094. Perhaps you meant Dark Woods?  Or perhaps you meant Stone to Flesh'd Shadow
  6095. Woods?  or ?
  6096.  
  6097.  
  6098. > The Consecrate spell wraps off the edge of the screen.
  6099.  
  6100. NOW FIXED.
  6101.  
  6102.  
  6103. * Added the Gadget to control Ruthlessness on the 2nd setup screen.
  6104. * Added Ruthlessness to the ascii prefs routines.
  6105.  
  6106. December 3rd, 2000:
  6107. ML sent in 17 Polski spell-translations, + a few words translated from
  6108. several others stating that I must give him a registered version or he
  6109. would quit.  I tried to explain to him that 17 spell descriptions isn't
  6110. even close to enough to warrant a registered version.  In the time it took
  6111. him to translate 17 spells, I added 16 new spells, meaning it will never be
  6112. finished.  Artur reports ML's descriptions as full of typographical,
  6113. grammatical and translation errors.
  6114.  
  6115. Added Artur's spell-descriptions T-Z (52 descriptions + his new bugfixed
  6116. Polski.catalog into the game.
  6117.  
  6118. December 5th, 2000:
  6119. * Added code to play a special mod when casting a spell if there is one
  6120.   in the Sounds/CastingMod/ dir.  Atm, the only spell with a CastingMod is
  6121.   Tribal Dance.
  6122.  
  6123. * Added code to play a special sound sample when casting a spell if there
  6124.   is one in the Sounds/CastingSounds/ dir.  Atm, the only spells with special
  6125.   casting sounds are Vox Celestes, Vox Angelica and Blonde.
  6126.  
  6127.  
  6128. December 9th, 2000:
  6129. I spent about 20 hours on IRC before and after the conference.
  6130. We had 150+ people on the Amiga channel to hear Mick Tinker speak.
  6131. Normally there are only 30-45 people on AmigaNet #Amiga.
  6132. It was fun!
  6133.  
  6134. December 10th, 2000:
  6135. * Added Artur's T Polski spell descriptions.
  6136. * Added SF's spell-corrected Magyar spell descriptions (A-Z)
  6137.  
  6138. December 13th, 2000: aaaaahhhh Al Gore finally officially quit trying
  6139. to steal the election.
  6140.  
  6141. December 17th, 2000:
  6142. Added Artur's Q-S Polski spell descriptions.
  6143.  
  6144. Artur writes:----------------------------------------------------
  6145. Having Chaos limited to 20 turns is
  6146. something deathly cruel - I just "finished" playing a game with 2
  6147. Combat trained Juju Zombies, with 2 Mana Batteries and I stood between
  6148. these batteries, mounted with a God Touched Haunt. I killed my
  6149. 6th-level opponent wizard, destroyed 5 generators (1 was a magical
  6150. Real Generator) and only 3 poor creatures left to slaughter... when I
  6151. reached 20th turn. You are wrecking my life this way and I am going to
  6152. commit a suicide (in the way that won't let you effectively use a
  6153. Raise Dead spell ...I don't know, maybe I'll jump into an aeroplane
  6154. engine so you will get a gooey blob in place of your favourite
  6155. translator).
  6156. ------------------------------------------------------------------
  6157.  
  6158.  
  6159. * Added Combat sucking sound for Mind Flayer.
  6160. * Added FallingIntoPit.8svx for when you fall into a pit.
  6161. * Added SpecialCombatShocker.8svx for special combat attacks by creatures
  6162.   with MAX_COMABAT (Shocker)
  6163. * spot^up donated a really cool mod for use in the game!
  6164.   I haven't added it into the game yet.
  6165.  
  6166. December 20th:
  6167. * Game over man, game over!  For player 1 dying.
  6168.  
  6169. December 21st:
  6170. * CastingTwirl.8svx and CastingUndeadTwirl.8svx for use when casting
  6171.   creatures.  We still need to come up with a sound for inanimates.
  6172.   The sounds sound very cool!
  6173.  
  6174. * REMOVED the code that auto-plays CastingSounds/spellname.
  6175.   I think it will work better to have the spells specially programmed to
  6176.   play the sounds.
  6177.  
  6178.   These sounds will only be used specifically by spells.
  6179.   I must still maintain a list of them!  So that "HasCastingSound(id)" will
  6180.   still work!  But I won't play them automatically!!!!!  Just take out the
  6181.   auto-playing code! DONE.
  6182.  
  6183.  
  6184. * Sent a complete update (with no music) of v3.05 to SAI, FD and Xav.
  6185.   SAI main executable was 395672.
  6186.   FD  main executable was 378052.
  6187.   Xav main executable was 378048.
  6188.  
  6189. Begin v3.06
  6190. December 22, 2000:
  6191. Music/ dir is currently 3.8 megs (3838908 bytes)
  6192. The only good thing about being totally SICK of programming is that I
  6193. finally took the time to go through the music files to get the next version
  6194. of the game ready.  I put in ALL the new songs, even the ones that still
  6195. need some work done on them.  I just don't feel like doing any complicated
  6196. or tedious work on them right now.  I'm sooooo sick of hearing the same 10
  6197. songs over and over again.  We need at least 50 different tunez.
  6198.  
  6199. * Put in 13.5 megs of new ChaosThemeSongs (11-60)
  6200.   Music/ dir is now 17.5 megs (17551558 bytes)
  6201.  
  6202. * We now have some spooky tunes, some beautiful guitar tunes, some
  6203.   heavy duty brain-thrashing, mind-melting tunes, some wonderous magical
  6204.   tunes and others.  Amiga Rulez da Muzik Scene!
  6205.  
  6206.   EXTRA SPECIAL THANKS TO ALL THE MUSICIANS WHO CONTRIBUTED MUSIC!
  6207.   (Complete list in the docs)
  6208.  
  6209. * We now have some VERY small mods that can work even in very low memory
  6210.   situations. 15k, 51k, 55k
  6211.  
  6212. * We now have 4 VERY large mods (over 600K) that will only work on systems
  6213.   with 2 megs of chipram.  If you don't have a LARGE contiguous hunk of
  6214.   chipram free then you will never hear these in the game.
  6215.   All 4 of these mods are of the "orchestral" variety so if you are tired
  6216.   of hearing a "hardcore 90's rave soundtrack" all the time then free up some
  6217.   chipram so you can hear these moving musical masterpieces.
  6218.  
  6219. * I played a test game with the new music.  It was me against 7 enemy
  6220.   wizards who were all in an alliance against me.  For several turns I was
  6221.   not making any progress.  I wasn't about to die, but I was nowhere near
  6222.   being able to kill 1 of the wizards.  I noticed the computer guys were
  6223.   attacking really stupidly.  This turned out to be because I forgot to turn
  6224.   on Ruthlessness.  The new AI really does make a difference.  After
  6225.   several turns of not accomplishing much, one of the wizards cast alliance
  6226.   on me!  So we were all 1 big happy family!  I was able to win on turn 45.
  6227.   The last wizard was cloaked with a reflector and mounted on an undead.
  6228.   This was no great problem.  It just slowed me down by several turns.
  6229.  
  6230. December 24th, 2000:
  6231. Well I was hanging around not really feeling like doing much of anything
  6232. when I suddenly thought up an idea for why the Ghost and other long sound
  6233. samples sometimes freak out and crash the computer.  I thought perhaps the
  6234. WaitJCSound() routine's use of FindPort() could be disabling multitasking for
  6235. long periods of time.  So I looked up FindPort() on the developer CD to see
  6236. if there were any warnings that it disables multitasking for long periods
  6237. of time and... YIKERZ!  I found something much worse!  It has a warning
  6238. that it does NOT disable multitasking AT ALL so that ANY and ALL uses of
  6239. FindPort() must be surrounded with Forbid() and Permit() !!!  So maybe this
  6240. has been causing all those weird random audio problems?!????  I made the
  6241. appropriate changes and played the Ghost sound 60 times under various CPU
  6242. loads and it never messed up!  If this was the problem it would totally
  6243. explain:
  6244. 1. The random nature of the bug.
  6245. 2. The random mess ups of the JCsound, audio.device sound, and maybe even
  6246.    the subsongs!
  6247. 3. The fact that the problem only seems to affect _long_ JCsound samples.
  6248.    A long sample means WaitJCSound() is calling FindPort() over and over and
  6249.    over again, waiting for it to end.
  6250.  
  6251. I am very happy about finding this!  Now we need to heavily test this to
  6252. see if all audio problems are now fixed!
  6253.  
  6254. * BUG: If for some reason you have no music files in the music/ dir, the
  6255.   game crashes.  I always wondered why in the WORLD this happened!?  Now I
  6256.   know it was because of the FindPort() outside of Forbid().
  6257.   NOW FIXED.
  6258.  
  6259.  
  6260. December 29th, 2000:
  6261. * Artur fixed the English Higher Devil and Lesser Devil spell descriptions.
  6262.   (There was a double "from").
  6263.  
  6264. * I added the sentence "Hyperclone will not replicate your wizard." to the
  6265.   Hyperclone spell description.  I also edited the first sentence.
  6266. * I removed the sentence "The powerful magic used in
  6267.   this spell usually produces a horrific, mutated copy of your wizard as a
  6268.   side effect." from the Lich Lord spell description.
  6269. * Zoltan complained about the Range Boost description so I fixed it up.
  6270.  
  6271.  
  6272. December 31st, 2000:
  6273. Joseph, Matt, Jason and J.J. played 3 different 4-player games of Chaos in
  6274. 3 hours.  They played with a bunch of scrolls.  On his 1st turn Matt cast
  6275. Orcs and stepped onto 2 scrolls.  This caused 1 of his newly acquired
  6276. spells to be accessible and the other 1 to go into position 100 where he
  6277. would never be able to use it.  They all agreed this was stupid and they
  6278. want all scrolls and bonus spells to go to the top of the list from now on.
  6279. I have now reprogrammed it so that all bonus spells ALWAYS go to the top of
  6280. spell lists for both human and computer players.  NOW FIXED.
  6281.  
  6282. They also want a "keep spell selection hidden" mode.
  6283.  
  6284. "Hidden Spell Selection"?  Won't fit on the lores setup screen . :(
  6285.  
  6286. There is no need to have this as an option.  It can simply always be on.
  6287.  
  6288. 1. Put up a screen when you end your turn and ask for the next player to
  6289.    press a button to continue.
  6290. What should this screen be?  A simple printed screen?  Or a 640x512x16
  6291. color IFF?  Or a 320x512 HAM6 IFF?  or ??? Or a 320x512 HAM6 anim?
  6292.  
  6293. * BUG: JJ reports that growths assist in the control of artifacts.
  6294.   Only creatures are supposed to assist in the control of artifacts.
  6295.   NOW FIXED.
  6296.  
  6297. * FLAW: JJ reports that Biohazard MeltScreen effect lasts toooo long.
  6298.   I have now reduced it from 100 iterations down to 70.  NOW FIXED.
  6299.  
  6300. January 1, 2001:
  6301. * Added all the musician's names to ChaosDocs.texinfo.
  6302.  
  6303. January 2, 2001:
  6304. Added the following default combat sounds for creatures who do not have a
  6305. defined combat sound:
  6306. Swoosh
  6307. SwooshUgh
  6308. BigSwooshUgh
  6309. BigSwooshUuugh! (15 combat hit against creature)
  6310.  
  6311. SwooshThud    (These are used for attacking inanimates)
  6312. BigSwooshThud
  6313.  
  6314. SwooshOnMetal (These are used for attacking Robot or Dalek)
  6315. BigSwooshOnMetal
  6316.  
  6317. BigSwoosh (All BigSwoosh sounds are used for combat>=12)
  6318.  
  6319. All 9 of the above sound samples combined together = only 42k!
  6320.  
  6321. BigSwooshUgh is used thusly:
  6322. volume=64 for 14 combat
  6323. volume=60 for 13 combat
  6324. volume=56 for 12 combat
  6325.  
  6326. SwooshUgh is used for any combat hit 6-11. Volume is always 52 for this one.
  6327. 6-11 = SwooshUgh
  6328.  
  6329. Swoosh
  6330. v=28 for 0 combat
  6331. v=32 for 1 combat
  6332. v=36 for 2 combat
  6333. v=40 for 3 combat
  6334. v=44 for 4 combat
  6335. v=48 for 5 combat
  6336.  
  6337. samplespeed = 8363 for all above samples.
  6338.  
  6339.  
  6340. For now attacking a growth will play either "Swoosh" or "BigSwoosh"
  6341. with no ughs.  When I find a suitable squishy sound I can change this to
  6342. SwooshSquish and BigSwooshSquish.
  6343.  
  6344. In order to implement the above sounds I had to change CellEffect() to take
  6345. an extra paremeter for the volume.  Then I had to spend a whole hour
  6346. changing hundreds of occurrences of CellEffect() to have the extra
  6347. parameter added.  After I did this I once again got the dreaded >32768
  6348. error on cast.c:
  6349.  
  6350.     SLINK WITH temp_smk.tmp
  6351. Slink - Version 6.58
  6352. Copyright (c) 1988-1995 SAS Institute, Inc.  All Rights Reserved.
  6353.  
  6354. Error 502: _sprintf symbol - Distance for Reloc16 > 32768
  6355.  
  6356.   First Reference in Unit cast.c at offset 00003a56 in file 'cast.o'
  6357.   To Unit sprintf.c at offset 00001690 in file 'LIB:scm.lib'
  6358.   Caused by line 1942 in file cast.c
  6359.  
  6360. So I syphoned out all the Intelligent Tree casting code into a new
  6361. IntelligentTreeCast.c file.  Now it links ok.
  6362.  
  6363. I just played a test game and Chaos mysteriously started generating
  6364. infinite enforcer hits.  After a few minutes of this I finally reset the
  6365. machine.  AFAIK this was caused by editing sound samples in OMSSP.  Editing
  6366. samples in OMSSP sometimes crashes the machine directly.
  6367.  
  6368. * BUG: I've been noticing the computer controlled creatures are playing
  6369.   really stupidly even though I have Ruthlessness turned on.  When I
  6370.   created the gadget for Ruthlessness I forgot to connect the Ruthlessness
  6371.   variable to it!  So Ruthlessness mode has not actually been working for the
  6372.   last week.  NOW FIXED.
  6373.  
  6374. * BUG: Mod.ChaosTheme18 starts out ok but then it starts playing too slowly
  6375.   after a while.  I have now converted it to MED MMD1 so now it works
  6376.   correctly.  NOW FIXED.
  6377.  
  6378.  
  6379. January 5th, 2001:
  6380. * BUG: This line of code was in the Growth() routine and was executed
  6381.   outside of any semaphore lock on the board!  A big no no!
  6382.               ip->char_stat = InitialData(ip->id);
  6383.   NOW FIXED.
  6384.  
  6385. * FLAW: The last generator that generated something is still highlighted
  6386.   all throughout the Growth() phase.  NOW FIXED.
  6387.  
  6388. * FLAW: The last Agent/generator that casted/generated something still has
  6389.   text left over at the bottom of the screen during the Growth() phase.
  6390.   NOW FIXED.
  6391.  
  6392. * NEW GFX FEATURE: I have now added code to keep animations of Green Ooze,
  6393.   Orange Jellies and Earthquakes synchronized so they look much better now.
  6394.   This code executes at the end of the Growth() function.
  6395.   Tested and works perfectly.
  6396.  
  6397. * I Played against 7 enemy wizards who were all in an alliance against me. 
  6398.   I won on turn 33.  Midway through the game one of them cast Alliance on
  6399.   me.  One of my allied wizards was cloaked and reflected and invulnerable 
  6400.   and another of them was invulnerable and cloaked.
  6401.  
  6402.   I was playing a game where I kept moving my snake and nothing was
  6403.   uncovered.  I then began to wonder how far out my snake was really feeling.
  6404.   So I decided I needed an "f" keypress.
  6405.  
  6406. * 3 NEW KEYPRESSES:
  6407.   f for "feeling range"
  6408.   h for "hearing range"
  6409.   o for "olfactory range" (o = olfactory = smell)
  6410.  
  6411. * FLAW: Heal and Vox spells erroneously print a promotion message.
  6412.   NOW FIXED.
  6413.  
  6414. * Included FD's reflowed and corrected Français spell descriptions.
  6415.  
  6416. * Reflowed all Magyar Spell Descriptions.
  6417.  
  6418. * BUG: Computer wizard had 3.5 movement points but moved 3.8 squares to
  6419.   mount his horse!  NOW FIXED.
  6420.  
  6421. * BUG: Grizzly Bear had 2.5 movement points but he moved 2.8 squares to
  6422.   attack me! NOW FIXED.
  6423.  
  6424. * PROBLEM: the casting beam sound is too loud compared to the sound of the
  6425.   casting twirl effect.  This is because all algorythmically generated sfx
  6426.   use a perfectly oscillating square wave.  So I have now reduced the volume
  6427.   of algorythmic sounds from 40 down to 32 and now everything sounds better.
  6428.   NOW FIXED.
  6429.  
  6430. * I drew a new Dark Citadel graphic.
  6431.  
  6432. * Sent Chaos v3.06 to Xav, FD and SAI on Jan 9, 2001.
  6433.   Executable filesize = 381432
  6434.  
  6435. January 10th, 2001:
  6436. * The color cycling of Special Combat on the info panel has always been
  6437.   unsatisfactory and crappy looking.  Now I see why I put off fixing this for
  6438.   so long.  It just took me 2 hours to get it all working correctly.
  6439.   NOW FIXED.
  6440.  
  6441. * Mod.ChaosTheme60 was playing much to slowly so I converted it to MED
  6442.   format. DONE.
  6443.  
  6444. * Played a test game using the default settings.  I won on turn 23.
  6445.   I could have won on turn 22 but I made a small tactical mistake.
  6446.  
  6447. January 11th, 2001:
  6448. * BUG: When creatures are promoted they lose their exophagy and scavenging
  6449.   powerups!  NOW FIXED.
  6450.  
  6451. * I finally added a (lame) chainsaw sound for the chainsaw.  We can now
  6452.   easily add new "weapon spells" that cause a certain sound to be played
  6453.   during combat.  Someone needs to take a chainsaw out and cut some wood
  6454.   with it and record it.  Especially the sound of it getting jammed up in
  6455.   the wood.
  6456.  
  6457. * Must modify promotion() to keep the new .WeaponSoundStat intact. DONE.
  6458.  
  6459. * Being attacked with a chainsaw is a very painful experience.
  6460.  
  6461. * I went crazy and played 3 complete test games just so I could hear
  6462.   creatures scream while I chainsawed them.  MUAHAHAHAHAHAHA!!!
  6463.  
  6464. January 13th, 2001:
  6465. I started getting sick.  I drank tons of orange juice and ate a large bowl
  6466. of Raisin Bran cereal.  My brain feels ok now but my throat is still
  6467. bothering me :(
  6468.  
  6469. * PARAGRAPH BREAKS are now supported in the spell descriptions!  Now we
  6470.   don't have to have long run-on super-huge spell descriptions all in 1
  6471.   giant paragraph.  I tested this by editing the descriptions for Points,
  6472.   Devastation, Alliance and Standard Wall.
  6473.   It works great and looks much nicer, especially
  6474.   on Devastation!  I suppose someone should go over all the spell
  6475.   descriptions and see if they need paragraph breaks and put them in.
  6476.   I'm really unclear as to where to place paragraph breaks.  It often seems
  6477.   like we need one after almost every sentence.
  6478.  
  6479.   Note to FD: I hope this doesn't break any Arexx->AmigaGuide document
  6480.   scripts or anything.
  6481.  
  6482. January 14th, 2001: Robin writes
  6483. > i
  6484. > have an idea for a new spell: what about a 'brain shield' which protects the
  6485. > wizard against 'brain drain' and perhaps even the Mindflayer? it's so hard
  6486. > having an enemy with Double and Brain Drain going around and stupidify
  6487. > wizards to death in a single turn from a rather great distance and without
  6488. > any chance of blocking.
  6489.  
  6490. There is a chance of blocking, Brain Drain requires line of sight so you
  6491. just have to move 1 of your creatures between you and the doubled wizard.
  6492. Or you can cast walls or trees to protect yourself.  Or you can climb into
  6493. a Magic Castle or Dark Citadel or Shadow City or Magic Wood tree, or you
  6494. can simply hop on a common horse or unicorn or you can use the mount spell
  6495. and mount anything at all.
  6496.  
  6497. So as you can see, there are a few ways to block. :)
  6498.  
  6499.  
  6500. January 15, 2001:
  6501. * Robin _finally_ sent in some Deutsch spell-descriptions (A-E).
  6502. * I sent a COMPLETE English spells archive to Robin and Wolverine today.
  6503. * I watched 2 movies today: "Pitch Black" and "The Cell".
  6504.  
  6505. January 16, 2001:
  6506. * I implemented help screens.  They are attached to the help key.
  6507.   These are mainly for newbie neophytes on their very first game.  But the
  6508.   "Help/Show me all the keys" option will be useful to everyone all the
  6509.   time.
  6510.  
  6511.   If you press help/What do I do now!?!?  then it is context sensitive
  6512.   depending on what phase of the game you are in (spell selection, spell
  6513.   casting or movement).
  6514.  
  6515. * Included Xav's bugfixed new Generator gfx into the game.
  6516.  
  6517. * FIXED Golden Dragon description: It said "vain" instead of "vein".
  6518.  
  6519. * CHANGED: the highlight sprite from #3 to #2 and adjusted the asm code
  6520.   in the vain hope that it will now work in dblpal.
  6521.  
  6522. * MYSTERIOUS BUG: Every once in a while, after I've been playing the game
  6523.   for a long time and I am running lots of other programs, I will go to
  6524.   save the game and the save game screen will freak out and cause lots of
  6525.   enforcer hits and not print the word "SAVE" along the side of the screen.
  6526.   This has happened several times over the last several months.  I finally
  6527.   figured out what it was!  The intro had this line of code:
  6528.   
  6529.   IF (UnionFont70)   CloseFont(UnionFont70);
  6530.  
  6531.   But then it never set UnionFont70=NULL; !
  6532.  
  6533.   So on the save game screen when it did this:
  6534.   IF (!UnionFont70) UnionFont70=OpenDiskFont(&ifs1);
  6535.  
  6536.   ... use the UnionFont70 here and wreak havoc by using a font that has
  6537.   already been closed.
  6538.  
  6539.   The reason the bug only happened randomly is that, normally if you close
  6540.   a font it is still there in memory and your pointer will still work, unless
  6541.   you get low on memory or manually force a flush of all unused resources
  6542.   such as typing "avail flush" in the shell.  NOW FIXED.
  6543.  
  6544. * NOTE TO BETATESTERS: I used the following secret technique to help me
  6545.   find the above bug, it should prove useful in the future when testing this
  6546.   software or other software by other people:
  6547.  
  6548.   1. Lets say you have a mysterious random bug.
  6549.   2. Do the thing that triggers the bug as the first thing you do when you
  6550.      load the program.
  6551.   3. When you see that the bug doesn't happen, go to the shell and type
  6552.      avail flush.
  6553.   4. Go do the thing that triggers the bug.  If the bug now happens then
  6554.      you'll know what the problem is!  Using a pointer to a freed resource!
  6555.  
  6556.  
  6557. January 17, 2001:
  6558. * Included Xav's new Wood Elf and Dread Elf into the game.
  6559.  
  6560. * I replaced wizard graphic #3 with Xav's Club Juggler, at least until we
  6561.   go to 32x32 256 color tiles.
  6562.  
  6563. Joe's friend David moved in.
  6564.  
  6565.  
  6566. January 21, 2001: Robin reports some flaws in the spell descriptions:
  6567. * Meddle (change than->the), 
  6568.  
  6569. > 3. exorcise - following situation: there is NO undead
  6570. > creature on the board. there is NO Browser or Omnipotent on the board. I
  6571. > resurrect a Green Dragon, in the same turn the computer exorcises it. how
  6572. > can that be?! is your AI that good that the computer chooses spells even
  6573. > because of possibilities? what had he done if I had chosen another spell?
  6574.  
  6575. Send me the autosave where this happened. (of the turn right after and
  6576. right _before_ it happened).
  6577.  
  6578. What you are describing is almost impossible.  Which means it is finitely
  6579. probable and in fact _will_ occur someday, sometime, somehow.
  6580.  
  6581. 1. There was probably an undead somewhere when he chose the spell (perhaps
  6582.    it got killed by something else before he got to cast it though).
  6583.  
  6584. 2. If there really was NO UNDEAD anywhere on the board when he chose his
  6585.    spell then its probably a bug.
  6586.  
  6587. 3. But maybe what happened was that he was totally surrounded by stuff so
  6588.    he could cast no creatures.  Now suppose his spell list was ALL CREATURES
  6589.    (which he cannot cast because he is surrounded) + he has an Exorcise spell.
  6590.    In such a case, he might choose Exorcise.
  6591.  
  6592. 4. Or maybe he was under the influence of that spell that prevents you from
  6593.    casting creatures.  And suppose he only had 10 spells left on his list
  6594.    and he had 9 creatures + 1 Exorcise.  He would then HAVE to choose
  6595.    Exorcise because it would be the only spell available to him on that
  6596.    turn.
  6597.  
  6598. 5. Or maybe he was surrounded by friendly creatures and friendly trees so
  6599.    that he couldn't cast any of his creatures.  Now lets say he has 2 Brain
  6600.    Drains (your fave spell :), 2 Lightning Bolts, 2 FireBalls, 2 Ice
  6601.    Breaths, 2 Magic Attacks and 2 Exorcise spells.
  6602.    In this situation he _can't_ cast his creatures and he doesn't _want_ to
  6603.    cast any of his magical attack spells because the only legal targets
  6604.    are his own creatures.  So he chooses Exorcise.
  6605.  
  6606. 6. There was probably an undead creature or undead wizard somewhere on the
  6607.    board that you just forgot about.  It was probably created by Raise Dead
  6608.    or Lich.  So the most likely scenario goes like this:
  6609.    1. Your enemy wizard sees an enemy undead Harpy somewhere that he is 
  6610.       going to Exorcise so he chooses Exorcise.
  6611.    2. You suddenly cast Raise Dead on a ferocious Green Dragon.
  6612.    3. This scares the computer player so badly that he has to reevaluate
  6613.       what he is going to cast his Exorcise on.
  6614.    5. After thinking long and hard about this (.001 milliseconds) he
  6615.       decides that your new Undead Green Dragon of Death is far more
  6616.       dangerous than the undead Harpy.
  6617.       So he sends your dragon straight to hell.
  6618.  
  6619. BTW: when I play games against JJ in real life, he is _always_ wizard #8
  6620. and he ALWAYS nukes my dragons/demons/etc with a
  6621. Justice/DarkPower/Vengeance/Exorcise/etc. _immediately_ on the same turn I
  6622. cast it.  He _always_ watches what spell I choose.  The only way I can get
  6623. away with casting a powerful creature is to wait for the phone to ring or
  6624. something then cast while he's away.
  6625.  
  6626.  
  6627. * Did a test: Change languages then Avail Flush then access every screen in
  6628.   the game to see if it still works.  Everything seems to work perfectly.
  6629.  
  6630. January 22, 2001:
  6631. * Included Xav's new Dire Wolf and Arctic Wolf into the game.  They are
  6632.   very blurry but oh well... I'll be glad when we make a hires version.
  6633. * Included Xav's new Gray Elf.  He's a bit tall for an Elf but oh well..
  6634.  
  6635. * Chaos needs a website!  But there is no point in having a website without
  6636.   screenshots!  But everyone on Team Chaos says the same thing "I don't know
  6637.   how to make a screenshot of Chaos".  Well I can't wait any longer for
  6638.   someone to figure this stuff out sooo....
  6639.  
  6640. * Spent some hours investigating all the screengrabbers on Aminet.
  6641.   NONE of them claimed to work with a multiscreen view so I didn't dl any
  6642.   of them.  The one grabber that I TRIED to download, I couldn't because my
  6643.   ISP sux SO BADLY that it would dl at 60 cps for 15 mins and then just
  6644.   abort. :(
  6645.  
  6646. ScreenGrabbers:  "" = It doesn't say it handles multiscreen views.
  6647. gfx/misc/MasterGrabber.lha It doesn't say it handles mulitscreens and it
  6648. requires bgui.library.  Did not dl it.
  6649. gfx/misc/Screen2IFF It doesn't say it handles multiscreens so I didn't dl
  6650. it.  Hey!!!  Its made by Frédéric Delacroix!!!!!!  Note to author: you
  6651. forgot to add multiscreen support :)
  6652. gfx/misc/ScreenGrab.lha Doesn't say it handles multiscreens.
  6653. ScreenJaeger: ""
  6654. ScreenMugShot: "" but can also grab windows.
  6655. SGXS: ""
  6656. ShScrIFF: ""
  6657. QuickGrab1_1.lha ""
  6658. ScreenGrab.lha ""
  6659. Slurp10.lha "" uses joystick button
  6660.  
  6661. gfx/show/AdEd.lha ""
  6662.  
  6663. util/misc/SGrabber.lha ""
  6664. util/misc/wgrab.lha ""
  6665. util/misc/ShootTheScreen.lha makes a series of screenshots.
  6666. urann@polbox.com only 5 weeks old.
  6667.  
  6668. util/wb/sgrab.lha 0 weeks old.
  6669.  
  6670. * DL'ed UAE + Kick31.rom + an 8 meg hardfile and installed them onto my
  6671.   brother's 650Mhz Athlon 128 megs + GeForce gfx card 32 megs
  6672.   I then put Chaos 3.0 onto it.
  6673.   1. It cruises at about the speed of a 14 Mhz 020 some of the time.
  6674.   2. A few times each turn it just STOPPED for a couple of seconds.
  6675.   3. Sometimes it stops for 10 or 20 or 30 seconds.  1 time it stopped for
  6676.      45 full seconds!!!  What is it doing??!?
  6677.   4. The mouse pointer moves much more sluggishly and jerkily than an A500.
  6678.   5. The mods of v3.0 played mostly ok.  There was a little "fuzziness" and
  6679.      "distortion" but overall the mods played ok EXCEPT for mod.ChaosTheme1
  6680.      which always went TOTALLY BERZERK!
  6681.   6. I said it "cruises" at about 14Mhz 020 speed.  Many times it randomly
  6682.      drops into slow-motion mode.  Like when you click on a creature,
  6683.      sometimes you'll move it before it makes the "beep" sound.
  6684.   7. The sprite lags behind the creatures a lot.  This is slower than A500
  6685.      with 7Mhz 68000.
  6686.   8. The autosaving is unbearably slooooooow.....
  6687.   9. The soundsamples sometimes played ok, other times they fuzzed out,
  6688.      other times they went TOTALLY BERZERK.
  6689.   10. The screen scrolling was MUCH slower than a 7Mhz 68000 Amiga 500!
  6690.       The scrolling looks horrible on UAE!
  6691.   11. All in all it wasn't any fun due to how looooong it took the computer
  6692.       to do its turn.
  6693.   12. I made some screenshots and worked out how to convert them from
  6694.       superhuge .bmp format to supersmall .jpg format using the software on
  6695.       his computer.
  6696.   13. Aaaargh!  The New Game and Quit Game requesters are HORRENDOUSLY
  6697.       slower than a naked A500!
  6698.  
  6699.  
  6700. January 23, 2001:
  6701. * Xav made a new super-cool 42-frame animation of a worm.  This crashes the
  6702.   game.  Its all because I forgot to add in the code to go from the first
  6703.   row down to the 2nd row and etc.  NOW FIXED.
  6704.  
  6705. * Sent Xav a new updated executable v3.07 + sounds/chainsaw
  6706.   + gfx/spells/Wizard 3 + catalogs/#? + help/#?
  6707.   Executable filesize = 385464.
  6708.  
  6709. January 24, 2001:  Spent all day sending Robin+Artur updated versions.
  6710.  
  6711. January 25, 2001: Included Xav's hilarious new Amphisbaena animation!
  6712.  
  6713. * STUPID: When playing with artifacts, computer wizards frequently cast
  6714.   Alliance on artifacts belonging to NOBODY.  NOW FIXED.
  6715.  
  6716. * STUPID: Sometimes computer players cast alliance onto people who are
  6717.   already on their team!  NOW FIXED.
  6718.  
  6719. * STUPID: When playing a game 1 human vs 7 enemy wizards who are all on the
  6720.   same team against the human, eventually 1 of the wizards will cast
  6721.   Alliance onto the human then EVERYBODY is on the same team!  NOW FIXED.
  6722.  
  6723. * STUPID: Computer players refuse to ever cast a double or triple alliance
  6724.   spell.  NOW FIXED.
  6725.  
  6726. * STUPID: Sega gave up on the Dreamcast :(  UNFIXABLE.
  6727.  
  6728. January 26th, 2001:
  6729. * Hacked and slashed Attila the Hun's labyrinth generation algorithm into
  6730.   Chaos and tested it about 40 times.  It worked perfectly every time!
  6731.   Only playtesting will reveal if this new option will be any fun or not.
  6732.   Hopefully it will at least be an interesting diversion to try out from time
  6733.   to time.
  6734.  
  6735. * Added code to properly put together Power Walls.
  6736.  
  6737. What should this new option be called?  I was originally going to call it
  6738. Maze Wars but it isn't exactly a maze.  More of a dungeon.
  6739. Here are some ideas for naming this option:
  6740. Maze Wars
  6741. Maze Fight
  6742. Dungeon
  6743. Dungeon Wars
  6744. Dungeon Fight
  6745. ???
  6746.  
  6747. * Added code for secondary and tertiary constructs.
  6748.  
  6749.  
  6750. Ok, now that there is Dungeon Wars mode I figure I should play a test game
  6751. to see if its any fun. :)
  6752.  
  6753. I am playing with 1 enemy wizard, 16 generators, no scrolls, no artifacts,
  6754. Texas Trash'em, Ruthlessness, Dungeon Wars, 99 spells, no turn limit.
  6755. Exploration mode is off.
  6756.  
  6757. The generated dungeon was composed of Shadow Wood trees.  This means that
  6758. as the game progressed the independents were fairly proficient at mowing
  6759. them all down since Shadow Woods only have 22 life points.
  6760.  
  6761.  
  6762. Turn 1: Aaaaugh!  I'm in the middle of the board!  I immediately cast my
  6763. Magic Carpet and hopped on and flew toward the safest corner.  I took heavy
  6764. damage before I could get to a safe spot from all the generated
  6765. long-distance flying creatures!
  6766.  
  6767. Some turns later...
  6768. The enemy wizard has cast a Shambling Mound.  It kills a creature almost
  6769. every turn.  It heals about 13 points per turn (+9 for scavenging and +4
  6770. during its attack with exophagy).  But it is taking about 22 points of
  6771. incoming damage each turn.  His Shambling Mound kept advancing toward the
  6772. front lines, killing things and taking tons of damage.  It was getting
  6773. pretty weak but then he turned it around and started heading away from the
  6774. hittable area of all the flying creatures.  This allowed him to heal up to
  6775. maximum within a few turns.  His Shambling Mound completely devoured
  6776. several corpses.  It finally died after a Blue Dragon was generated nearby,
  6777. After he lost his Shambling Mound, he lost all his other creatures and his
  6778. wizard.  :(
  6779.  
  6780. Oh great!  Now everything that had been fighting the computer wizard is
  6781. charging down towards me!  Auugh!  Oh well... no problem.  My Grey Elf
  6782. Batallion is right behind a solid wall of Shadow Wood trees.  My 3 harpies
  6783. weaken everything down then my 3 Grey Elves kill them.  So I'm 100% safe.
  6784.  
  6785.  
  6786. Turn 22: I've only killed 3 of the 16 generators.  The computer wizard died
  6787. a long long time ago.  My wizard is in no danger of being killed, I have a
  6788. nice safe corner that I control.  However it will be a long and slow
  6789. process to kill another generator because when I killed the last generator
  6790. all the flying creatures swarmed in on me and killed my Floating Eye and my
  6791. Speed Harpy (my 2 best creatures).  The only reason I'm doing as well as I
  6792. am is that I got a triple spell several turns ago and cast Triple Magic
  6793. Sword, Wraith, Zombie, Harpy, Grey Elf.
  6794.  
  6795. Now for my bonus spell on Turn 22 I can choose 1 of the following:
  6796. Elf Boots, Skeleton, Recover Boost or Mass Morph!  I'm choosing Mass Morph!
  6797. Wahoo!!!!!  Now I can win the game quickly and get back to coding new
  6798. stuff!
  6799.  
  6800. On turn 35 I had killed all the generators except for 5 which were blocked.
  6801. But I didn't win because there are a bazillion pieces of independent
  6802. Magic Woods laying around from the Mass Morph.
  6803.  
  6804. I guess I should change the victory conditions so that enemy inanimate
  6805. objects do not need to be killed to win.  Is that ok?
  6806. What is your opinion of this?
  6807.  
  6808.  
  6809. * Added DungeonWars to the savegamefile io.c and to the prefs.c
  6810.  
  6811. * Added the Dungeon Wars gadget to the setupscreen 2.
  6812.  
  6813.  
  6814. January 28th, 2001:
  6815. * Made 126 tiles for the upcoming Tower.
  6816. * Made 72 ID's for the upcoming Tower.
  6817.  
  6818. January 31st, 2001:
  6819. * BUG: When a creature with a Telescope is promoted, it loses its Telescope.
  6820.   NOW FIXED.
  6821. * BUG: Any creature which is given any enhanced sight, smell, hearing or
  6822.   feeling will lose those enhancements when promoted.  NOW FIXED.
  6823.  
  6824. * Edited the website a bunch.
  6825.  
  6826. Feb 1st, 2001: FD Writes:
  6827. > BTW, I think Chaos does not correctly handle saved games with a space in
  6828. > the name. Probably quotes missing in the lha command line.
  6829. NOW FIXED.
  6830.  
  6831. * Included Wolverine's new Magyar.catalog.
  6832.  
  6833. The mac can't lha things or unlha them correctly so here is the zip
  6834. command:  zip -R DestinationFile.zip *
  6835.  
  6836. I lha'ed and Zip'ed the Chaos website.  The lha archive was smaller.
  6837.  
  6838.  
  6839. Bad News:
  6840.  
  6841. My brother went to the hospital so I started to copy the latest
  6842. version of the game over to the PC using floppies as you suggested.
  6843. The game fit onto 6 720k floppies (no music).  Nice and easy you say?
  6844. Oh no!  The stupid damn PC floppy drive kept randomly screwing up!!!
  6845. Sometimes it would copy the file, sometimes it wouldn't.  I only got
  6846. files 2,3 & 4 to copy.  After hours of trying I gave up and decided to
  6847. email the files to myself.  It takes 10 mins to email 1 file.  Just as
  6848. it was almost finished, my brother came home!  3.5 hours wasted trying to
  6849. copy the game onto the PC!  Arrrgh!
  6850.  
  6851. So now I must wait until Friday when he will allegedly go to work all day.
  6852. DL the files from my yahoo mail (5 mins).  Join them (5 mins). Unlha them
  6853. on UAE, (1 hour).  Then I can load all the levels and make the screenshots.
  6854.  
  6855. Good News: My brother is cured.  But he is still recovering.
  6856.  
  6857.  
  6858. Feb 2, 2001:
  6859. -------------------------- Setup Problems -----------------------------
  6860. * FLAW: Every time you start a game the 1st dungeon is the same as the
  6861.   1st dungeon of the last time you loaded the game.  2nd is the same as the
  6862.   2nd, etc.  rnd_seek is now loaded from IntuitionBase->Micros so this is
  6863.   NOW FIXED.
  6864.  
  6865. * FLAW: If you play Dungeon Wars mode with 99 generators, the board is
  6866.   pretty much solid on turn 1 with _many_ generators blocked off.
  6867.   NOW FIXED.
  6868.  
  6869. * BUG: If you start a game with 99 Generators and 99 scrolls and 99 artifacts
  6870.   The game gets stuck in an infinite loop.  NOW FIXED.
  6871.  
  6872. * Allow generators to be placed on empty squares OR in place of inanimate
  6873.   objects OR on top of dead bodies OR on top of scrolls. DONE.
  6874.  
  6875. * Allow scrolls to be placed under generators, under the dungeon pieces or
  6876.   in empty spaces or on top of dead bodies. DONE.
  6877.  
  6878. * Allow artifacts to be placed on top of scrolls, on top of dead bodies or
  6879.   into empty squares. DONE.
  6880.  
  6881. * BUG: If you play with Dungeon Wars + 99 generators + 99 artifacts
  6882.   then the game still gets stuck in an infinite loop because there isn't
  6883.   enough room to place all the artifacts.  NOW FIXED.
  6884.   TESTED and works perfectly!
  6885. ---------------------- END Setup Problems --------------------------
  6886.  
  6887.  
  6888. I just played a test game of 99 generators + 99 scrolls + 99 artifacts
  6889. + 1 enemy wizard + Ruthlessness + Texas Trash'em + Dunegon Wars.
  6890. It took me quite a few hours to finally win.
  6891. After a while I got an Aesculapius and started pumping up all my guys.
  6892. Then I started killing tons of generators and walls.  On a typical turn
  6893. I would get to choose 3 spells from a list of several.
  6894. I got the Mass Morph spell offered to me on my bonus spell selection
  6895. screen MANY MANY times!  It was offered to me twice in 1 selection 1
  6896. time!  It was offered to me around a dozen times during the game.
  6897. This is very weird.  It never once offered me what I really needed:
  6898. a Fly spell or an Archery spell or a Wizard Wings spell or a Recover Boost
  6899. or a Lich.
  6900.  
  6901. * Problem: I can't stand the way Standard Walls look on the Dungeon Wars
  6902.   maps.  The color between the bricks looks very bad IMHO.
  6903.   It should either be a _very_ dark red or black.  NOW FIXED.
  6904. * Problem: I can't stand the way Weak Walls look either.
  6905.   The color between the bricks should be either a _very_ dark yellow
  6906.   or black.  NOW FIXED.
  6907. * Problem: The Hwall and Vwall pieces of Power Walls don't look so
  6908.   good when they are the last piece on the end and not connected to
  6909.   anything.  NOW FIXED.
  6910.  
  6911. Aaaaah now the gfx seem much more appealing to me. :)
  6912.  
  6913. * PROBLEM: Lha 2.1 is buggy and crashes the machine, which is why I use
  6914.   lha 1.35.  However, users with lha 2.1 seem to have an lhaopts file
  6915.   which uses parameters that don't work on lha 1.35.  This causes
  6916.   game saving and loading to not work.  So I have now hacked lha 1.35 to
  6917.   NOT try to read the lhaopts file.  NOW FIXED.
  6918.  
  6919.  
  6920. Feb. 3, 2001:
  6921. * The translation of "Magic Resistance" in the Magyar.catalog is
  6922.   "Mágia ellenállóképesség" which is wayyy tooooo long to fit on the
  6923.    info panel.  I am shortening it down to Mágia Ellenállás.
  6924.  
  6925. * Manõverezhetõség is also toooo long. I am shortening it to
  6926.   Manõver.
  6927.  
  6928. * Generated the IP1 screen for Magyar finally.
  6929.  
  6930. * Put Ruthlessness and Dungeon Wars into the ChaosDocs.texinfo then
  6931.   sent it to FD.
  6932.  
  6933. Feb. 4, 2001:
  6934. * Made the first couple of screenshots of Chaos.
  6935.  
  6936.  
  6937. Feb. 5, 2001:
  6938. * Spent all day wandering around the net on DSL + writing Emails + reading
  6939.   newsgroups.
  6940.  
  6941. * I DL'ed and played 3 games from Aminet. 1 was somewhat interesting (very
  6942.   creative).  The other 2 pretty much sucked. :(
  6943.  
  6944. * Included Robin's new OPQ Deutsch descriptions.
  6945.  
  6946. Feb. 6, 2001:
  6947. * NEW GFX: Included Xav's great new Optometron of Omniscience and Exit gfx!
  6948.  
  6949. * I updated HelpWanted.html, installation.html, requirements.html,
  6950.   legal.html, features.html, chaos.html and index.html, HelpWanted.html
  6951.   a bit.
  6952.  
  6953. * Robin and Xav and Artur are all reporting serious Email service problems
  6954.   and disruption.
  6955.  
  6956. Feb. 7, 2001:
  6957. * I loaded up some 1990 and 1991 commerical platform games to study the
  6958.   graphical fx.  I learned some nice stuff. :)
  6959.  
  6960. Feb. 8, 2001:
  6961. * STUPID: If you shoot your allied wizard repeatedly he won't cast his
  6962.   Separation spell if he has one.  NOW FIXED.
  6963.  
  6964. Above fix meant I had to change the gamesave format so I went
  6965. ahead and added in the the 2 WORDs for the 5 leather armors and 5
  6966. chainmails spells + added in some unused LONGs while I was at it. DONE.
  6967.  
  6968. Make a new LONG in the Wizards[] struct that contains the value of the
  6969. desire to cast Separation.  .SeparationDesire. DONE.
  6970. Modify the ranged combat routine to add points to this LONG every time an
  6971. ally shoots one of his creatures with normal combat.  Subtract off healing
  6972. combat. DONE.
  6973. Any positive hit on a wizard or a wizard's mount sets it to
  6974. max(.SeprationDesire,100); DONE.
  6975. ALL DONE.
  6976.  
  6977. * You can shoot an allied wizard who has a reflector and it won't make him
  6978.   mad.
  6979. * You can shoot an allied wizard or any allied creation with 0 or negative
  6980.   combat and it won't make him mad.  In fact, shooting your allies with
  6981.   healing combat will make them like you more.
  6982. * Tested and works perfectly!
  6983.  
  6984. END OF V3.1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6985.  
  6986. Made a copy of everything into sc:Chaos_3.2/
  6987.  
  6988. BEGIN V3.2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6989.  
  6990. Feb. 9, 2001:
  6991. * Implemented Towers.
  6992.  
  6993. Tower*
  6994. Lo, I beheld a great vision, as it were, of a Tower.  And the Tower was
  6995. small.  And the hand of God came down from Heaven and the essence of man
  6996. was placed therein so that all who dwelled in the Tower would work together
  6997. to achieve a mighty greatness.
  6998.  
  6999. Inscribed upon the face of the Tower were these words:
  7000. "He who entereth shall not leaveth and no wizard shall ever enter."
  7001.  
  7002. Many humble peasants saw the tower and spake amongst themselves, "We are
  7003. weak but the Tower is strong, let us enter into it that we might strike
  7004. great fear into the hearts of our enemies".
  7005.  
  7006. And it came to pass that the Tower gained the strength of strong men,
  7007. the wisdom of wise men, the constitution of hearty men, and the skill
  7008. of the greatest archer.
  7009.  
  7010. The limit of its power is not yet known.
  7011.  
  7012.  
  7013. Tower*
  7014. The mystical powers of the Magic Tower allow it to absorb the essence of
  7015. any creature who enters it.
  7016. The Tower starts out very short but as it becomes more powerful it grows in
  7017. size.  Any creature entering a tower adds all of its primary statistcs to
  7018. the statistics of the Tower.  Once a creature enters a tower it can never
  7019. leave because its essence becomes one with the tower in a permanent and
  7020. unbreakable bond.  Wizards cannot enter towers.
  7021.  
  7022.  
  7023. Height = Life that way it can grow and shrink according to how
  7024. damaged it is.
  7025.  
  7026. Blue flag = archery.  Red flag = attacks undead.
  7027.  
  7028. Red doorway indicates scavenging.
  7029.  
  7030. For 9 levels of height there will be 9 * 2 = 18 frames of
  7031. animation for a tower with 1 flag.
  7032.  
  7033. 18 frames for a tower with Red Flag.
  7034.  
  7035. 18 more frames for a tower with Blue Flag.
  7036.  
  7037. 18 more frames for a tower with both flags.
  7038.  
  7039. 18 more frames for a tower with scavenging (red doorway) + Red flag.
  7040.  
  7041. 18 more frames for a tower with scavenging and the Blue flag
  7042.  
  7043. 18 more frames for a tower with scavenging and both flags.
  7044.  
  7045. 9 single frames for a plain tower with no flags and no animation.
  7046.  
  7047. 9 single frames for a plain tower with no flags but with scavenging.
  7048.  
  7049. 126 frames for 1 object!!!  126 frames if I use 9 height levels of 7 each!
  7050.  
  7051.  
  7052. 9 Height levels corresponding to 7 points of life each.
  7053. 0-7 = lowest level. (no trunk)
  7054. 8-14 = 1 pixel of height.
  7055. 15-21 = 2 pixels of height.
  7056. 22-28 = 3 pixels of height.
  7057. 29-35 = 4 pixels of height. (starting height).
  7058. 36-42 = 5 pixels of height.
  7059. 43-49 = 6 pixels of height.
  7060. 50-56 = 7 pixels of height.
  7061. 57-63 = 8 pixels of height.
  7062.  
  7063.  
  7064. TowerLevel1ID  "Tower Level 1"
  7065. TowerLevel2ID
  7066. TowerLevel3ID
  7067. TowerLevel4ID
  7068. TowerLevel5ID  "Tower Level 5" (The real beginning one)
  7069. TowerLevel6ID
  7070. TowerLevel7ID
  7071. TowerLevel8ID
  7072. TowerLevel9ID
  7073.  
  7074. TowerLevel1UID "Tower Level 1 U"
  7075. TowerLevel2UID
  7076. TowerLevel3UID
  7077. TowerLevel4UID
  7078. TowerLevel5UID
  7079. TowerLevel6UID
  7080. TowerLevel7UID
  7081. TowerLevel8UID
  7082. TowerLevel9UID
  7083.  
  7084. TowerLevel1SID "Tower Level 1 S"
  7085. TowerLevel2SID
  7086. TowerLevel3SID
  7087. TowerLevel4SID
  7088. TowerLevel5SID
  7089. TowerLevel6SID
  7090. TowerLevel7SID
  7091. TowerLevel8SID
  7092. TowerLevel9SID
  7093.  
  7094. TowerLevel1AID "Tower Level 1 A"
  7095. TowerLevel2AID
  7096. TowerLevel3AID
  7097. TowerLevel4AID
  7098. TowerLevel5AID
  7099. TowerLevel6AID
  7100. TowerLevel7AID
  7101. TowerLevel8AID
  7102. TowerLevel9AID
  7103.  
  7104. TowerLevel1UAID "Tower Level 1 UA"
  7105. TowerLevel2UAID
  7106. TowerLevel3UAID
  7107. TowerLevel4UAID
  7108. TowerLevel5UAID
  7109. TowerLevel6UAID
  7110. TowerLevel7UAID
  7111. TowerLevel8UAID
  7112. TowerLevel9UAID
  7113.  
  7114. TowerLevel1SAID "Tower Level 1 SA"
  7115. TowerLevel2SAID
  7116. TowerLevel3SAID
  7117. TowerLevel4SAID
  7118. TowerLevel5SAID
  7119. TowerLevel6SAID
  7120. TowerLevel7SAID
  7121. TowerLevel8SAID
  7122. TowerLevel9SAID
  7123.  
  7124. TowerLevel1USID "Tower Level 1 US"
  7125. TowerLevel2USID
  7126. TowerLevel3USID
  7127. TowerLevel4USID
  7128. TowerLevel5USID
  7129. TowerLevel6USID
  7130. TowerLevel7USID
  7131. TowerLevel8USID
  7132. TowerLevel9USID
  7133.  
  7134. TowerLevel1USAID "Tower Level 1 USA"
  7135. TowerLevel2USAID
  7136. TowerLevel3USAID
  7137. TowerLevel4USAID
  7138. TowerLevel5USAID
  7139. TowerLevel6USAID
  7140. TowerLevel7USAID
  7141. TowerLevel8USAID
  7142. TowerLevel9USAID
  7143.  
  7144.  
  7145.  
  7146. 1. Save out 72 different gfx files, correctly arranged and with the correct
  7147.    name.  DONE.
  7148. 2. Save out 72 different spell files.  Correctly set up for the new tower
  7149.    object.  DONE.
  7150. 3. Save out 72 different spell description files?  I dunno.  I think we
  7151.    only need the description for Tower Level 5.  You can't ever read any of
  7152.    the others.  Hopefully that will work.  1 description saved.  DONE.
  7153. 4. Write code to check all objects on board if they are a tower and set
  7154.    them to the correct id based on their life value. DONE.
  7155. 5. Above routine is _always_ called at the end of casting any spell, at the
  7156.    end of the combat routine and the end of the ranged combat routine.
  7157.    DONE.
  7158. 6. Figure out how to generally handle "damagable" objects!
  7159.    There is no way to "generally" handle them (that I can think of)
  7160.    because the anims might be changed based on movement points or
  7161.    life or any other stat.
  7162. 7. Put in the code to the movement routines ala pit and shadow wood and
  7163.    bolter.
  7164.    A. Any move into a tower by a creature (tower and creature are owned by
  7165.       the same person) results in the creature entering the tower ala pit.
  7166.       DONE.
  7167.    B. An engaged person can sneakily escape into a Tower!  DONE.
  7168.    C. Any move into a tower by a creature (tower and creature are NOT owned
  7169.       by the same person is going to be handled JUST LIKE USUAL, its just a
  7170.       plain normal attack.  DONE.
  7171.    D. If you click on a Tower, handle it just like a Shadow Wood. DONE.
  7172. 8. We could have a special little sound to play for when a creature enters
  7173.    a tower but I have no idea what it should be.  Any ideas?
  7174.  
  7175. * Played a couple of test games with Towers.  Everything seems to work ok.
  7176.  
  7177. ====================== END TOWERS UPGRADE ===============================
  7178.  
  7179. Feb. 10, 2001:
  7180. * STUPID: Computer wizards sometimes cast Cartagraphy, Telescope,
  7181.   Seismology and Alternography when the game is not even in exploration mode!
  7182.   NOW FIXED.
  7183.  
  7184. On 07-Feb-01, Sean A. Irvine wrote:
  7185. > I had a quick game of Chaos last night. The only stupid thing I
  7186. > noticed was when my own Mullac de Irvine decided to cast an
  7187. > earthquake right next to my wizard. Naturally, I gave the Mullac
  7188. > a war[n/m]ing blast from my dragon and he didn't do it again.
  7189.  
  7190. Hehehe.
  7191.  
  7192. Ok I have now adjusted the AI so that computer-controlled spellcasters will
  7193. not cast Earthquakes adjacent to friendly wizards.  Unless the friendly
  7194. wizard has an Earthquake shield, then they might cast it there anyway.
  7195. NOW FIXED.
  7196.  
  7197. * DITTO for Floods and Fires.
  7198.  
  7199. * Included Robin's new Power Wall description into the game.
  7200.  
  7201. * Activated the Chaos website and uploaded all the files.  It works ok but
  7202.   all the fonts seem too small.
  7203.  
  7204. * BUG: An allied computer wizard might still cast Earthquake adjacent to
  7205.   one of his allied wizards if he is meditating in an enemy meditation.
  7206.   The trouble is that SameTeam() gets confused when Wizards are inside of
  7207.   enemy objects.  NOW FIXED.
  7208.  
  7209. Feb. 11, 2001:
  7210. * ADDED: Special Combat now plays the creature's special attack sound from
  7211.   Sounds/Combat/ just like regular combat does.  This was needed for Wasp
  7212.   Nest and Grim Reaper.
  7213.  
  7214. * NEW CREATURE: Grim Reaper.  Stats, animation, sound and description
  7215.   designed by Robin!  I put this one in first since he did the whole
  7216.   package himself which freed my mind to concentrate on coding.
  7217.   I tested the new creature and he seems to work ok.  He's very tricky to
  7218.   use, especially in Dungeon Wars mode.
  7219.  
  7220. * Added sound effects for Wasp Nest and Grim Reaper to the Sounds/Combat/
  7221.   dir.
  7222.  
  7223. * BUG: There was no WaitJCsound() in the CellEffectList() routine so the
  7224.   long sound effects of 1 special combat thing could overlap into the
  7225.   special combat of another thing.  NOW FIXED.
  7226.  
  7227. * 2 new wizard names: When you start the game there are now 2 new
  7228.   possibilities for the random wizard names:
  7229.   Robin Hood in honor of Robin Schmidt.
  7230.   King Artur in honor of Artur Chlebek.
  7231.  
  7232. * Updated contacts.html some more.
  7233.  
  7234. Feb. 12, 2001:
  7235.  
  7236. * 3 NEW SPELLS: Ditzy Blonde, Winged Elf Boots and Anger.
  7237.  
  7238. -----------------------------------------------------------------
  7239. Ditzy Blonde*
  7240. Range 5 LOS.
  7241. ComputerAssist: FLAG_SMART
  7242. IsStupid() don't cast on 3 or lower intelligence.
  7243. -----------------------------------------------------------
  7244.  
  7245. Winged Elf Boots*
  7246. Winged Elf Boots are manufactured with genuine Pegasus Feathers which bestow
  7247. the ability of flight upon the wearer as well as increasing movement and
  7248. maneuverability.
  7249. CAST_FREE
  7250.  
  7251. I couldn't decide whether or not:
  7252. A: To have this spell grant +1 movement points or not.
  7253. B: To allow this spell to be cast on _anyone_ or only the wizard.
  7254.  
  7255. -------------------------------------------------
  7256. * A new spell: Anger
  7257.  
  7258. Anger (Probability -40, BONUS spell, CAST_FREE)
  7259.  
  7260. Anger is a powerful spell which will make all your creatures
  7261. very angry at their opponents.  As a result their combat ability
  7262. will be raised by 1 point.
  7263. -------------------------------------------------
  7264.  
  7265. * BUG: The Ditzy Blonde sound sample for some UNKNOWN reason had the default
  7266.   volume set to 0!  Arrrgh!  So it would play silently!  NOW FIXED.
  7267.  
  7268. Any updates I send out will need a new Ditzy Blonde casting sound!
  7269.  
  7270.  
  7271. Feb. 13, 2001:
  7272. * 2 NEW SPELLS: Worm and Blood Worm.
  7273.  
  7274. Feb. 14, 2001:
  7275. * Included Xav's damagable Weak Wall, Strong Wall and Standard Wall.
  7276.   I implemented the proramming for them and then played a test game.
  7277.   WORKS GREAT!
  7278.  
  7279. Feb. 15, 2001:
  7280. * Included Xav's damagable Rock.  I smoothed many (all?) of the
  7281.   Rock pieces.
  7282.  
  7283. Feb. 16, 2001:
  7284. * EDITED: The Amphisbaena to have the word balloon over his head.
  7285.  
  7286. * I DREW: 8 additional damaged variations of Power Wall Center, Power Wall
  7287.   Vertical and Power Wall Horizontal.
  7288.  
  7289. Feb. 17, 2001:
  7290. * INCLUDED: The new damaged Power Wall variations into the game.
  7291.  
  7292. Change CWallID -> PowerWallCenter9ID
  7293. Change VWallID -> PowerWallVertical9ID
  7294. Change HWallID -> PowerWallHorizontal9ID
  7295.  
  7296. * BUG: Destroy Wall and Animate spells totally do not work with the new
  7297.   multi-damageable variations of walls system.  NOW FIXED.
  7298.  
  7299. * Artur _finally_ sent in a 50% translation of the game. (He promised it
  7300.   would be done by Jan 2nd, 2001)
  7301.   English.catalog 4237
  7302.   QuickStartDocs.txt 7380
  7303.   SpellDescriptions/ C-Z 85025
  7304.   TOTAL: 96642 bytes  (50% = 95529)
  7305.  
  7306.   Combining the 50% translation + his mods = the agreement we made many
  7307.   eons ago.
  7308.  
  7309. * Spent several hours compiling/testing/archiving/sending Artur his v3.04re
  7310.   version of chaos.
  7311.  
  7312. * Spent 1 hour investigating why the png gfx of the website work on all
  7313.   amiga webbrowsers and on MSIE but not on linux or netscape mac.
  7314.  
  7315. Feb. 18, 2001: Experimented with drawing damaged Lions.
  7316.  
  7317. Feb. 19, 2001:
  7318. * BUG: I put chainsaw on my ghost and it didn't make the chainsaw noise!
  7319.   (when I attacked a red dragon)
  7320.   Ok right now it is set so that if a creature already has an attack sound
  7321.   then it just keeps playing the normal attack sound when you have a
  7322.   chainsaw.  The chainsaw noise is only played on creatures who have no
  7323.   attack sound.  Should this be changed?  I think the answer is yes.
  7324.   NOW FIXED.
  7325.  
  7326. * INCLUDED: Xav's new Free and Free All gfx into the game.
  7327.  
  7328. Robin writes:
  7329. > Raise Dead: A powerful spell, if wisely used. The comupter, however,
  7330. > does not use it wisely: I played a game with all 8 wizards in one team,
  7331. > against 26 generators. there happened some fierce combat and then a wizard
  7332. > who had the Depth power-up spoke the Raise Dead. But he didn't raise the
  7333. > Blue Dragon that was lying in front of him, no, he raised that stupid
  7334. > Fire Bat in some corner of the board?!
  7335. > How does the computer choose what corpus it raises?
  7336.  
  7337. Ok I looked into this and it seems to be completely random!  I never knew
  7338. that!?!
  7339.  
  7340. * STUPID: Raise Dead and Resurrection are cast completely randomly with
  7341.   _no_ AI whatsoever.  I have now changed this to make it use the general
  7342.   Dangerousness() algorithm.  NOW FIXED.
  7343.  
  7344. Feb. 20, 2001:
  7345. * Compiled v3.04d for Aminet.
  7346.  
  7347. Feb. 21, 2001:
  7348. * PROBLEM: I will soon be entering in 24 variations of the Lion.  But I
  7349.   don't want to have to waste 24 identical dead images of the Lion so I need
  7350.   to implement Groups (of IDs) into the game.  NOW FIXED.
  7351.  
  7352. * Creatures need a Group: tag in the spell file.
  7353.   If this tag is missing then Group = 0.  If Group==0 then there's no
  7354.   group.  Otherwise Group is the ID to get the dead body information from.
  7355.   This way I don't have to have a jillion identical dead body images for
  7356.   every creature-variation!  Group tag added. DONE.
  7357.  
  7358. * InsertCorpse() and InsertCorpseUnder() must be modified to check for
  7359.   IF (InitialData(id).Group != 0) id=InitialData(id).Group;
  7360.   DONE.
  7361.  
  7362. *  Test out putting in a lion with no dead body and see if the tilecount
  7363.    goes down by 1!
  7364.    BEFORE: tiles 228864
  7365.    AFTER:  tiles 228672
  7366.    Yeah!  It works!!!
  7367.  
  7368. * Included FD's new SpellsToTexInfo.rexx and his new paragraph fixed
  7369.   English and Français spell descriptions A-D.
  7370.  
  7371. * I split Readme.txt into 2 seperate files: History1997-1999.txt and
  7372.   History2000.txt.  I deleted Readme.txt since it really isn't intended for
  7373.   the general public to read.  It is just the history of implemented changes.
  7374.  
  7375. * BLOOD: Xav says that with the new bloody versions of the creatures the game
  7376.   will become a blood bath and some people may not like that.  Therefore we
  7377.   need a Blood on/off feature.  DONE.
  7378.  
  7379. * I put the Blood option on the setupscreen, the gamesave file and the
  7380.   prefs file.  DONE.
  7381.  
  7382. * BUG: The score of the independents is NOT saved with the game!!!!
  7383.   in score.c and io.c change MAX_WIZARDS to ENTITIES
  7384.   While I'm at it I'm going to convert all existing levels to have
  7385.   BloodMode=ON.
  7386.   Reload and resave ALL the levels using the new routine.
  7387.   NOW FIXED.
  7388.  
  7389. Feb. 22, 2001:
  7390.  
  7391. * Included FD's new ChaosDocs.texinfo fully updated for V3.1 of Chaos.
  7392.  
  7393. Feb. 23, 2001:
  7394. * Included the new setup screens including the new Blood option for
  7395.   English, Français and Deutsch.
  7396.  
  7397. * Included FD's new Paragraphized English and Français spell descriptions
  7398.   A-Z.
  7399.  
  7400. * Included FD's new scripts/ dir for making documentation related files.
  7401.  
  7402. * Included Krzynio's Polski ChaosLite.readme and Valwit's Deutsch
  7403.   ChaosLite.readme into the aminet v3.04 version.
  7404.  
  7405. Feb. 24, 2001:
  7406. * Uploaded v3.04 to Aminet with a readme in all 5 languages.  The Rosetta
  7407.   Stone of .readmes. :)  The purpose of this version is to have a 100%
  7408.   version sitting on Aminet during the months that it takes me to prepare the
  7409.   next MEGA release of Chaos.  Archive size is: 5933797 bytes.
  7410.  
  7411. Feb. 25, 2001:
  7412. * 12:01 a.m. I saw the new ChaosLite.lha (v3.04) materialize onto Aminet.
  7413.  
  7414. * 8:00 a.m. Updated the website contacts.html and downloads.html from Chaos
  7415.   v3.0 to Chaos v3.04.
  7416.  
  7417. * Implemented the complete new Lion. 72 tiles + 1 tile for the dead body.
  7418.  
  7419. Lion
  7420. Lion d1
  7421. Lion d2
  7422. Lion d3
  7423.  
  7424. Lion 3 legs
  7425. Lion 3 legs d1
  7426. Lion 3 legs d2
  7427. Lion 3 legs d3
  7428.  
  7429. Lion 0 legs
  7430. Lion 0 legs d1
  7431. Lion 0 legs d2
  7432. Lion 0 legs d3
  7433.  
  7434. Lion wings
  7435. Lion wings d1
  7436. Lion wings d2
  7437. Lion wings d3
  7438.  
  7439. Lion 3 legs wings
  7440. Lion 3 legs wings d1
  7441. Lion 3 legs wings d2
  7442. Lion 3 legs wings d3
  7443.  
  7444. Lion 0 legs wings
  7445. Lion 0 legs wings d1
  7446. Lion 0 legs wings d2
  7447. Lion 0 legs wings d3
  7448.  
  7449.  
  7450. * PROBLEM: When playing the game in English, the translated spell names are
  7451.   not shown at the bottom of the screen.  Only the TRUE name of the creature
  7452.   is shown (such as "Lion wings d1").  This looks tacky.  This has never
  7453.   really been correct but it has always been tolerable until now because we
  7454.   have so many jillions of damaged versions of objects.
  7455.   Possible Solutions:
  7456.   A: Make new spell description files for these new object variations and
  7457.      then force the English mode to use these translated names instead of the
  7458.      true names.
  7459.   B: Make the bottom of the screen code and the info panel code display the
  7460.      name of the Group that the object belongs to rather than the exact name
  7461.      of that ID.
  7462.      This sounds like the easiest option since it requires 0 new spell
  7463.      description files to be created, edited and maintained.
  7464.   Ok I just made a simple change to the CreatureName() function so everything
  7465.   that prints the name of a creature in the whole program should now
  7466.   automagically work with this new system.  NOW FIXED.
  7467.  
  7468.  
  7469. * BUG: Ack!  Certain names of certain spells are totally wacked out in
  7470.   Français mode!  Lion, Faun, Cobra work.  Passage, Invulnerability,
  7471.   Vengeance, Justice, Abduction, Raise Dead, X-Ray, Unicorn do not work.
  7472.   Ok I just spent a whole hour investigating this problem.  I _finally_
  7473.   figured out what is going on!  This is all because the lists of spell names
  7474.   in SpellDescriptions/#?.txt were not rebuilt after I added in the new
  7475.   spells!  These must be rebuilt each time a new spell is added.  I'm going
  7476.   to change the makefile to delete them all each time I do a "smake clean"
  7477.   (like it used to do).  NOW FIXED.
  7478.  
  7479.  
  7480. Feb. 26, 2001:
  7481. * GROUPS: I went back and put all power walls into 1 big group.
  7482.   I also put all other damagable walls and rocks into their own individual
  7483.   groups.  This fixes foreign translation problems.
  7484.  
  7485. FD Writes:
  7486. > * During special combat, "independents" is still printed at the bottom of
  7487. > the screen.
  7488.  
  7489. I just tested this and it didn't say "independents" but it did say
  7490. "range = 0" at the bottom.  NOW FIXED.
  7491.  
  7492. > * When a creature comes back from the astral plane, during the subsequent
  7493. > spell selection, the player # key shows it as unmoved. Just a detail.
  7494.  
  7495. I propose that _all_ creatures should be set to unmoved during the spell
  7496. selection phase.  This has been bothering me for a long time.  I always
  7497. want to check how far a certain creature can move during my spell selection
  7498. but I never can because they have all been set to "already moved".
  7499. NOW FIXED.
  7500.  
  7501. > * My wizard mounted an independent flying carpet (BTW, I was quite surprised
  7502. > to see such a "creature" to be generated), but I cannot move the carpet. I
  7503. > can't even dismount. While this is OK for magic wood (but what would happen
  7504. > if someone casts stone to flesh on the tree I'm meditating in?), this is
  7505. > quite disturbing for creatures.
  7506.  
  7507. What is happening now is that the game checks if something is a Meditation.
  7508. If its a Meditation and its empty then anyone can enter it, even if the
  7509. meditation is a creature that belongs to someone else.
  7510.  
  7511. Possible solution:
  7512. Do not allow wizards to mount CREATURES which belong to the enemy, even
  7513. if the creature is a meditation.  This sounds perfectly sensible to me
  7514. and this is the way the game has traditionally always worked.
  7515.  
  7516. Ok I just added in the line of code to prevent human wizards from mounting
  7517. enemy meditation creatures.  But now I am thinking I should have just left
  7518. it the way it was.  It sounds pretty cool that you can mount an enemy magic
  7519. carpet in an emergency.  You should eventually get a bonus spell out of it.
  7520. But if you have only 1 enemy and you are mounted on his Magic Carpet then
  7521. you'll be invulnerable because he won't attack his own stuff to get at your
  7522. wizard.  Is this an interesting strategic aspect?  Or a bad design flaw?
  7523.  
  7524. Aaaaaugh!  I don't know what to do!
  7525.  
  7526. I'm leaving the fix in since I already put it there.
  7527. So the rules currently are:
  7528. "You cannot mount any enemy creature."
  7529. "You can mount an enemy inanimate object if it is a meditation object and
  7530. nobody else is already mounted there."
  7531.  
  7532. * ADDED the code to prevent computer wizards from mounting enemy
  7533.   creature meditations to many AI routines and movement routines.
  7534.   This took 1 hour.
  7535.  
  7536. * TEST: Placing one of my Magic Carpets next to an enemy wizard to see if
  7537.   he can sneak mount it.  The enemy computer wizard attacked it. PASSED.
  7538.  
  7539. * TEST: Surrounding an enemy wizard with my Magic Carpets.  The wizard
  7540.   could not mount them, he attacked them instead.  PASSED.
  7541.  
  7542. * TEST: Surrounding my allied wizard with my Magic Carpets.  The wizard
  7543.   could not mount them nor attack them.  PASSED.
  7544.  
  7545. * TEST: Surrounding an enemy wizard (who has max manoeverability)
  7546.   with my Magic Carpets.  This is to make sure he is not engaged.
  7547.   He just attacked one of my Magic Carpets.  PASSED.
  7548.  
  7549. > * My creatures accept to attack this carpet. They should not, since it's
  7550. > (supposed to) be a hide for me.
  7551.  
  7552. Its an enemy creature, so of course they accept to attack it. :)
  7553.  
  7554.  
  7555. If you are mounted in an enemy Dark Citadel and someone casts Stone to
  7556. Flesh on the Dark Citadel you will then be mounted on an enemy creature and
  7557. you won't be able to dismount because the game does not allow you to click
  7558. on enemy CREATURES.  You have always been allowed to click on enemy
  7559. inanimate objects IF you are mounted in them.
  7560.  
  7561. Possibilities:
  7562. A: Leave it alone.  The Dark Citadel will collapse soon enough and you'll
  7563.    only be trapped for a while.
  7564.  
  7565. B: Modify the code to allow you to dismount from an enemy creature.
  7566.  
  7567. C: Allow people to control enemy creatures if their wizard is mounted on
  7568.    them.  (This sounds really weird to me.)  If we did this then I think
  7569.    _both_ players (the player who owns the creature and the player who is
  7570.    mounted on the creature) would each control the creature in turn.  A
  7571.    split-personality psychotic creature.  I recall this happening in some
  7572.    games years ago, possibly due to some silly bug.
  7573.  
  7574. > E. When the wizard somehow mounts an object (be it a creature or inanimate)
  7575. > that does not belong to him (like a foreign meditation object, or if s.o.
  7576. > casts stone to flesh on a citadel), then this object is automatically
  7577. > tranfered under his control (because of the spatial confinment mounting
  7578. > allows, increasing the concentration of astral & psionic particles) :-)
  7579. > Just like a 100%-success subversion.
  7580.  
  7581. When I was going through piles of AI routines and editing them so that
  7582. computer players will now (allegedly) not "think" that they can mount
  7583. enemy creature meditations... I was half-tempted to change the rules and
  7584. allow _ANY_ wizard to mount _ANY_ mountable creature.
  7585.  
  7586. My idea goes like this:
  7587. 1. Any wizard can mount any mountable creature.
  7588. 2. Perhaps allow wizards to dismount anything they are mounted on.
  7589.    Or maybe not.
  7590. 3. If you are mounted on an enemy creature then you get to control it, but
  7591.    since it is an ENEMY creature your movement might be very limited (you
  7592.    might get engaged to your own real creatures).  And you won't be able to
  7593.    attack things owned by the same owner as the mount you are riding.
  7594.    But you nevertheless could still move and attack things belonging to
  7595.    other players.
  7596. 4. If you are mounted on an enemy creature then the real owner of that
  7597.    creature still gets to control the creature as normal on his turn.
  7598.  
  7599. So for example you might be about to die, you have NO choice but to mount
  7600. the enemy Elephant that is about to kill you. (You have previously cast Ride).
  7601.  
  7602. Suppose the Elephant belongs to player 1 and you are player 8.
  7603.  
  7604. Each turn Player 1 will move the elephant and kill one of your puny orcs.
  7605.  
  7606. Then on your turn you charge off in the other direction to kill an enemy
  7607. creature.
  7608.  
  7609. I think it would be cool to be mounted on an enemy creature.  You never
  7610. know where he'll take you!  You have some control over him.  But he has
  7611. some control over you too!  It could be wild!
  7612.  
  7613. On the other hand it might be stupid, if you have only 1 enemy because
  7614. he would never attempt to harm his own creature.
  7615.  
  7616.  
  7617. I didn't attempt to put this idea into the game because:
  7618. 1. You guys don't seem to like it.
  7619. 2. There is a good chance that it will cause some secret side-effect bugs
  7620.    that will have to be debugged and I don't feel like working that hard
  7621.    on it right now.
  7622. 3. Even if no new bugs get created, it will still take some time to think
  7623.    about all the AI routines and movmenet routines and how to modify them
  7624.    to work correctly with the new rule.
  7625. 4. It might be a totally stupid idea.
  7626.  
  7627. Perhaps I will put in some #ifdef code some day to test out this idea
  7628. temporarily, just to see if it works ok, if its any fun or not, etc.
  7629.  
  7630.  
  7631.  
  7632.  
  7633. * INCLUDED: Xav's new Centaur, Juju Zombie, Pox and really awesome Pegasus
  7634.   gfx!
  7635.  
  7636. * IMPLEMENTED: the complete new damagable Leopard (24 IDs, 73 tiles) and
  7637.   the new damagable Elephant (24 IDs, 97 tiles).
  7638.  
  7639. * There are now 3 damagable creatures in the game: Lion, Leopard, Elephant.
  7640.   I guess that is enough until I hear back from people if they like them
  7641.   or don't like them or whatever.
  7642.  
  7643.  
  7644. Feb. 27, 2001:
  7645. ======================== SOME ANNOYING BUGS ============================
  7646.  
  7647. * ANNOYING BUG: During the movement phase when you are moving your
  7648.   creatures around; when you click on an object to attack it the amount of
  7649.   life left in the object is not updated at the bottom of the screen.
  7650.   In order to force the screen to update you must move the mouse entirely
  7651.   off the current square and then back onto that square.
  7652.  
  7653. * ANNOYING BUG: When you shoot an object, the life at the bottom is not
  7654.   updated until you move the mouse completely off the square and back onto it.
  7655.  
  7656. * ANNOYING BUG: When you shoot an undead object and kill it so that the
  7657.   square is now completely empty, the text at the bottom of the screen still
  7658.   says the name of the object that WAS there, not what is _currently_ there!
  7659.   You must move the mouse completely off the square and back onto it again
  7660.   to see what is really there.
  7661.  
  7662. * ANNOYING BUG: When you kill a growth and the growth dies and reveals a
  7663.   covered creature, the text at the bottom of the screen STILL says you are
  7664.   pointed at the growth!  It doesn't update to show what you are REALLY
  7665.   pointing at now.  You must move the mouse pointer off the current square
  7666.   and back onto it to get it to update the text.
  7667.  
  7668. * ALL ANNOYING BUGS NOW FIXED!  (I put a Clearoxoy() everywhere there was a
  7669.   RecalculateAllDamagedObjects() + I put one at the end of SayCreatureName())
  7670. =========================================================================
  7671.  
  7672. * PROBLEM: The Level Editor menus are about to overflow with all these
  7673.   bajillions of damaged object variations.  I have now changed it so that
  7674.   damaged variations of objects are not shown in the menus, only the original
  7675.   primary object is shown.  NOW FIXED.
  7676.  
  7677. Arrrgh! Now that I fixed the level editor bugs the game won't link!
  7678.     SLINK WITH temp_smk.tmp
  7679. Slink - Version 6.58
  7680. Copyright (c) 1988-1995 SAS Institute, Inc.  All Rights Reserved.
  7681.  
  7682. Error 502: @MENUSpeech symbol - Distance for Reloc16 > 32768
  7683.  
  7684.   First Reference in Unit chaos.c at offset 000001ae in file 'chaos.o'
  7685.   To Unit menu.c at offset 00000010 in file 'menu.o'
  7686.   Caused by line 723 in file chaos.c
  7687.  
  7688. Chaos.o debug=fullflush is 181540 bytes.  That seems to be about the limit
  7689. before this retarded >32768 bug starts happening. :(
  7690.  
  7691. * ADDED: code=far to the compilation of chaos.c.  Now Chaos.o is 182564
  7692.   bytes and the game compiles and links perfectly now!
  7693.  
  7694. * I improved the gfx for Uncertainty, Inanimorphobiosis and Mass
  7695.   Petrification.
  7696.  
  7697. Feb. 28, 2001:
  7698. * I had to go back through all 72 Tower spell files and add in a line
  7699.   Group: TowerLevel5ID to each one.  This should hopefully solve all
  7700.   on-screen translation problems.
  7701.  
  7702. * BUG: Magic Carpets NEVER collapse!  I had just assumed there was code
  7703.   in BoardUpdate() to go through and check all meditations and randomly
  7704.   collapse them.  But in fact, each object must be hardcoded in to be
  7705.   checked for.  I will rewrite it later.  For now I added MagicCarpetID
  7706.   to the list of things to check for.  NOW FIXED.
  7707.  
  7708. * BUG: Damaged objects don't make their attack sounds, death sounds or
  7709.  kill sounds!  NOW FIXED.
  7710.  
  7711. * I Changed the combat, death and kill sounds determination code to
  7712.   play the sound associated with that SPECIFIC ID.  If it doesn't have
  7713.   one then it checks if this thing is in a group and if it is then
  7714.   it uses the sound from the Groupid (if the Groupid has a sound).
  7715.   This allows super maximum flexibility because now a Winged Lion could
  7716.   have a different kill, death or combat sound than the regular Lion.
  7717.   There is no immediate need for this but the need will arise in the
  7718.   future.
  7719.  
  7720.  
  7721. On 28-Feb-01, Robin Schmidt wrote:
  7722. > I've got some strange tales to tell. Sit down and listen, my friend...
  7723. > 1. There once was an Emerald Dragon. It was strong and proud and it got the
  7724. > ability to reincarnate. Wenn it destroyed the Weak Wall of an enemy wizard
  7725. > with a mighty blow of its claws and a blast of fire, it perished itself due
  7726. > to the Eye For An Eye spell of that enemy wizard. But lo! it reincarnated
  7727. > and returned as a fresh Green Dragon, and at once, within the same turn, it
  7728. > attacked its enemy with claw and breeth again! A mighty ally, isn't it?
  7729.  
  7730. Yes indeed.
  7731.  
  7732.  
  7733. > 2. There once was a T-Rex who came along to fight against me. I stopped it
  7734. > with some undeads and shot a Toxity Beam at it. Its magical resistance
  7735. > dropped him dead within three turns, but I wondered how it could continue
  7736. > fighting with its full strength of 15, though it ought to loose one point
  7737. > per turn?
  7738. > Strange things, my friend, strange things...
  7739.  
  7740. Thank you for reporting this bug!  I just spent a whole hour fixing it.
  7741.  
  7742. * BUG!  Manoeverability, combat, ranged combat and special combat recovery
  7743.   don't work right!  Example: if some thing with max manoeverability and max
  7744.   combat gets hit with toxicity beam then his combat and manoever stats NEVER
  7745.   DECREASE!  Even though all his recovery rates are at -1!  NOW FIXED.
  7746.  
  7747. * Included Xav's new Derro, Eagle, Faun and Hybsil.
  7748.  
  7749. March 1, 2001:  I woke up and my throat was completely dry and hurting
  7750. and my head feels bad.  I'm getting sick again! :(
  7751.  
  7752. * STUPID: Computer wizards sit next to 4 Dark Woods, taking 8 points of
  7753.   damage each turn, even though there are MANY safe squares that the wizard
  7754.   could move to!  NOW FIXED.
  7755.  
  7756. * TESTED: Played some test games.  The Wizards seem to move ok.
  7757.   If you notice computer wizards moving in a completely stupid manner then
  7758.   please let me know and send me the before and after autosaves please!
  7759.  
  7760. * TESTED: I placed Nuked squares and powerful creatures on 1 side of a
  7761.   wizard and Nuked squares with MANY Shadow Cities just beyond in an attempt
  7762.   to trick the wizard into moving himself into the Nuked square and dying.
  7763.   He did not move into the Nuked squared.  PASSED.
  7764.  
  7765. * TESTED: As above but with pits.  PASSED.
  7766.  
  7767. * I got my Commodore 1960 Multisync monitor up and running on the A3000,
  7768.   A1200 and PC.  It can scan up to at least 37.9 Khz even though the
  7769.   instruction manual says 35.5Khz.  Of course it scans down to 15.75 Khz.
  7770.   It can do at least 800x600 noninterlaced @ 60 Hz.   It can do at least
  7771.   1024x768 interlaced.
  7772.  
  7773. * I drank lots of mineral water.  I feel somewhat better now.
  7774.  
  7775. March 2, 2001:
  7776. * I designed the numbers 0-30 in a nice smoothed out manner using a 6 point
  7777.   font.  I made red and green versions.  This is for use in the new
  7778.   CellEffects.
  7779.  
  7780. * I took Xav's new Attack CellEffect made 31 versions of it (0-30) using
  7781.   red numbers.  This will be the new standard Attack cell effect.  The 0-30
  7782.   is to show the damage being done.  30 is the maximum damage that can ever
  7783.   be inflicted by a single hit (max combat + Battle Cry)
  7784.  
  7785. * I took the old original Attack CellEffect and improved it a little and
  7786.   then made 31 versions of it for use as the new Healing CellEffect.
  7787.   We really need a better animation for this though.
  7788.  
  7789. Attack  (unspecified damage, unused)
  7790. Attack0
  7791. Attack1
  7792. Attack2
  7793. ...
  7794. Attack30
  7795.  
  7796. Heal (unspecified damage, unused)
  7797. Heal0 (This is unused also)
  7798. Heal1
  7799. Heal2
  7800. Heal3
  7801. ...
  7802. Heal30
  7803.  
  7804.  
  7805. We still need some good animations for the following effects:
  7806. 1. Poisonous attack. (e.g. Giant Rat, Cobra etc.)
  7807. 2. Healing attack. (e.g. Hippocrates, Pool, Aesculapius, etc.)
  7808. 3. "Weird" attack. (An attack against a weird statistic like e.g.
  7809.    Intelligence or Maneuverability or something.  Mind Flayer, Spectator,
  7810.    etc.)
  7811. 4. An attack against multiple statistics at once e.g. Arctic Wolf, Iridium
  7812.    Horse, etc.
  7813.  
  7814.  
  7815. March 3, 2001:
  7816. * Did the programming to display the new attack and heal fx in the game.
  7817.   This requires rewriting CellEffect() to take YET ANOTHER parameter for
  7818.   the damage (or intensity) of the effect.  Most effects will be ignoring
  7819.   this parameter, at least at first.  For now only the Attack and Heal effect
  7820.   will make use of the damage (intensity) parameter to display the amount of
  7821.   damage being done during the attack.
  7822.  
  7823. AAAAAUUUGGGHHH!!!  I'm going crazy!!!!
  7824.  
  7825. There are 58 spell files with a CellEffect() call in them!!!
  7826. There are around 70 CellEffect() calls in the spell files + lots more in
  7827. the main program files.
  7828.  
  7829. Every time I upgrade CellEffect() or other functions I always spend all
  7830. year loading up each individual spell file and editing it and saving it and
  7831. its driving me insane.
  7832.  
  7833. It would be REALLY nice if all the code was in 1 file.
  7834.  
  7835. I've done a million of these upgrades of various functions and each time
  7836. its the same old story.  Load up a bajillion seperate files, edit them and
  7837. save them.  It would just be sooooo much easier on me to have only a few
  7838. code files instead of hundreds.
  7839.  
  7840. What is the solution?
  7841.  
  7842. Ok I worked out a solution.  At least this will work for the time being:
  7843. flashfind from "" search CellEffect quiethit nohighlight >t:t
  7844. produces a nice list of filenames like this:
  7845.  
  7846. GAMES:sc/Chaos_3.2/cast.c
  7847. GAMES:sc/Chaos_3.2/cell.c
  7848. GAMES:sc/Chaos_3.2/chaos.c
  7849. GAMES:sc/Chaos_3.2/core.c
  7850. GAMES:sc/Chaos_3.2/move.c
  7851. GAMES:sc/Chaos_3.2/start.c
  7852. GAMES:sc/Chaos_3.2/warp.c
  7853.  
  7854. Then I just do some searching and replacing in CED to make it look like:
  7855.  
  7856. work:ed GAMES:sc/Chaos_3.2/cast.c -sticky
  7857. work:ed GAMES:sc/Chaos_3.2/cell.c -sticky
  7858. work:ed GAMES:sc/Chaos_3.2/chaos.c -sticky
  7859. work:ed GAMES:sc/Chaos_3.2/core.c -sticky
  7860. work:ed GAMES:sc/Chaos_3.2/move.c -sticky
  7861. work:ed GAMES:sc/Chaos_3.2/start.c -sticky
  7862. work:ed GAMES:sc/Chaos_3.2/warp.c -sticky
  7863.  
  7864. Then I just execute t:t and I just saved TONS of work.
  7865. (There are 58 more files in the Spells/ dir)
  7866.  
  7867. Now If I can just get FD to make me a script or something to do all that
  7868. automatically I'll be set. :)
  7869.  
  7870. Now I must decide if I actually _want_ to add this new parameter to
  7871. CellEffect() or if I should just make a new routine called CombatEffect()?
  7872. On the 1 hand, out of 170 occurrences of CellEffect() calls only a few of
  7873. them (the ones in the combat routine) need the extra parameter.  On the
  7874. other hand, the other effects _MAY_ need the extra parameter in the future
  7875. once someone makes more intricate gfx animations for the other fx....
  7876.  
  7877. So I guess I'll go ahead and edit all those calls to have the extra
  7878. parameter.  DONE.
  7879.  
  7880. * BUG: Speech for Blood Worm does not work.  NOW FIXED.
  7881.  
  7882. March 4, 2001:
  7883. * Played a test game to test the new effects.  Seems to work ok.
  7884.  
  7885. * Made an actualDamage(player,damage) function to tell me the actual damage
  7886.   that will be done, taking into account vodka and battlecry so the ranged
  7887.   combat and special combat routines will know which CellEffect to show.
  7888.  
  7889. Robin Writes:
  7890. > But what about Torment and Discard? My computer-allies really
  7891. > like to cast that on me.
  7892.  
  7893. Ok, good point!  I just now fixed it so that Torment and Discard use the
  7894. same AI as Coercion.  This means they won't cast it if ALL the wizards are
  7895. on the same team.
  7896.  
  7897. I don't know what to do about if you and 1 computer guy are in an alliance
  7898. against several other wizards.
  7899.  
  7900. > When I had a stunned creature, which couldn't move due to a Basilisk, there
  7901. > are two undocumented features: 1. The creature CAN actually move. It just
  7902. > has to kill any enemy it is engaged to and then moves into its square.
  7903.  
  7904. Absolutely correct.
  7905.  
  7906. > 2. (never tried it): You can *speed it _up_* using the slow spell
  7907. > (setting his moves to 1), can't you?
  7908.  
  7909. Hehehehe, YES!  You can do that!!!!  I forgot about that!  I can see you
  7910. have become a formidable champion of the ways of Chaos!
  7911.  
  7912. > And one idea about Power Walls: Let them stay active even when the wizard
  7913. > dies. They have enough energy to maintain themselfs, don't you think so?
  7914.  
  7915. That could be an interesting idea.
  7916.  
  7917.  
  7918. * INCLUDED Robin's new Kurzanleitung v1.2 (he edited Valwit's v1.1)
  7919. * INCLUDED Robin's new Deutsch spell descriptions A-S.
  7920.  
  7921. * Robin sent in a very nice 3x3 squares gfx of an explosion!  For use by
  7922.   the Goblin Bomb or Hand Grenade or whatever we want!  Now I must figure
  7923.   out how to load the thing into the game.  Should it be a .iff or a .anim or
  7924.   a .animbrush or ?
  7925.  
  7926. March 5, 2001:
  7927. * CURSOR KEYS: There are certain times during the game where I just want to
  7928.   smoothly and easily check the life of a bunch of things in a straight line.
  7929.   There is no easy way to do this with the mouse.  I try pressing the cursor
  7930.   keys to move the mouse pointer but nothing happens.  Also, in the level
  7931.   editor there are DEFINITELY LOTS of times where I need cursor key control. 
  7932.   Like when I am trying to just quickly build a long wall.  So I have now
  7933.   programmed the cursor keys to move the mouse pointer exactly 16 pixels in
  7934.   the chosen direction.  NOW FIXED.
  7935.  
  7936. * Zoltan sent in piles of gfx and sounds for use in Chaos: World's Best
  7937.   Strategy Card Game.  The only trouble is that I already have hundreds of
  7938.   good unused sounds laying around on my hard drive, but I can't decide what
  7939.   sounds to use for what event....  And the gfx seem to be drawn in about
  7940.   26x16 pixels for a 640x256 screen so they look very short and fat on a
  7941.   square-pixel Chaos screen of 320x256 or 640x512.  Also the gfx are drawn
  7942.   in only 16 colors with 0 antialiasing.  However some of the gfx still
  7943.   look really cool.  Many of the sounds are great!  My mind is going to
  7944.   explode!  Aaaaauuuuggghhh!!!!
  7945.  
  7946. March 6, 2001:
  7947. I fiddled around with Dpaint 5 and animbrushes.
  7948. I tried to play an animbrush file using the ShowAnim command in my C: but
  7949. it crashed.  ShowAnim only works with .anim files.  But .anim files always
  7950. seem to take up the entire screen. :(
  7951.  
  7952. * Xav sent in BAZILLIONS of nice tiles!!!!  Lots of walls but no damaged
  7953.   variations.
  7954.  
  7955.  
  7956. March 7, 2001:
  7957. Robin Writes:
  7958. > A creature just attacked the (enemy) Magic Tree his wizard sits on.
  7959. > Kinda stupid?
  7960.  
  7961. Ok I have now adjusted the AI code to realize that attacking an ENEMY unit
  7962. with a FRIENDLY wizard mounted on it is stupid.  This includes attacking
  7963. with combat or ranged combat.  NOW FIXED.
  7964.  
  7965. * STUPID: Computer creatures will heal friendly units (such as Magic Trees
  7966.   and Castles) which have ENEMY wizards inside them!  This includes healing
  7967.   with combat and ranged combat.  NOW FIXED.
  7968.  
  7969. Fiddled around with Dpaint and morphing and explosions.  For some reason
  7970. when I morph my brushes I get excellent graphical results but they are all
  7971. out of alignment!  And I don't know how to realign them perfectly!
  7972.  
  7973. March 8, 2001:
  7974.  
  7975. * BUG: PlayNextThemeSong() is blindly opening and reading and writing
  7976.   files with no error checking!  This causes the game to crash when run
  7977.   from a write-protected media.  Most CD's are write-protected. :)
  7978.   NOW FIXED.
  7979.  
  7980. * BUG: UpdateTimeSpentPlayingChaos() terminates the game as soon as it
  7981.   fails to write to the update file.  Which means it will always terminate
  7982.   the game when run from CD.  NOW FIXED.
  7983.  
  7984. * BUGs: Various pieces of code in start.c call TerminateChaos() as soon as
  7985.   any disk write operation fails.  So the game will just quit and not
  7986.   start from CD.  NOW FIXED.
  7987.  
  7988. Ok, now the game runs from CD but there are various annoyances:
  7989. 1. A requester pops up twice each turn saying "Volume CD0: is
  7990. write-protected" "Retry/Cancel". (Once for PlayNextThemeSong() and once for
  7991. UpdateTimeSpentPlayingChaos()).
  7992.  
  7993. 2. The game now tries to rebuild the indexes of all the thousands of
  7994. translation and graphic and sound files EACH and EVERY time you load the
  7995. game from CD.  This makes a huge delay every time you load the game.
  7996.  
  7997. SOLUTION: Make PlayNextThemeSong() check for write-protectedness of the
  7998. disk and set a global variable DiskIsWriteProtected appropriately.
  7999. Then all the "file-writing" pieces of code can check this and avoid all
  8000. writes.  NOW FIXED.
  8001.  
  8002. * Chaos can now be played from CD or other write-protected media.
  8003.  
  8004. March 9, 2001:
  8005. * UPLOADED v3.04cd to Aminet with the CD-fix and the "special combat
  8006.   against nobody" fix.
  8007.  
  8008. Investigated various options of getting an AGA Amiga up and running.
  8009.  
  8010. March 10, 2001:
  8011. * BUG: I can't get any INACTIVEWINDOW messages! :(
  8012.   I was going to program in "pause mode" to stop the animation whenever you
  8013.   click to another program.  This would save millions of CPU cycles.  But I
  8014.   never get any IDCMP INACTIVEWINDOW messages!  What is going on?!???
  8015.  
  8016. Ok, here was the bug:  This code has been wrong for years!
  8017.         USHORT class = msg->Class;
  8018.         ULONG   code = msg->Code;
  8019.  
  8020. The correct code is:
  8021.         ULONG class = msg->Class;
  8022.         USHORT code = msg->Code;
  8023.  
  8024. There were a total of 14 occurrences of the above buggy code scattered
  8025. throughout the realms of chaos! ALL NOW FIXED!
  8026.  
  8027. * PAUSE MODE now works perfectly!  Anytime you click into some other window
  8028.   of some other program the CHAOSANIM task stops animating the screen.
  8029.   I had thought this would be a good feature years ago but I didn't know
  8030.   how to do it.  This can greatly reduce the multitasking cpu load.  This
  8031.   feature is dedicated to Robin Schmidt who asked for it.
  8032.  
  8033.  
  8034. March 11, 2001:
  8035. I spent all day shopping for Amiga upgrades.
  8036.  
  8037. Local computer store:
  8038. $ 99.00 30 Gigs Seagate Ultra DMA/100 hard drive.
  8039.  
  8040. $115.00 40 Gigs Western Digital /100  hard drive.
  8041. $ 40.00 32 Megs EDO ram 72-pin SIMM 60 ns
  8042.  
  8043.  
  8044. Mail order:
  8045. 40Mhz 040 accellerator $240.00
  8046. 50Mhz 060 accellerator $430.00
  8047.  
  8048. 2.5" to 3.5" IDE adapter ?????
  8049.  
  8050. Total upgrade cost 430+115+40+50(shipping etc.) $635.00 !
  8051.  
  8052. I was thinking about how much trouble it was going to be to reinstall all
  8053. these jillions of megs of software onto the new A1200 hard drive.  Then I
  8054. came up with an idea!  Instead of buying a new 30 gig IDE hard drive I will
  8055. just buy the SCSI module instead and then take the drive out of my A3000
  8056. and put it into my A1200 and *poof* everything is instantly installed
  8057. perfectly!  The OS, the compiler, all my utilities and fonts and C:
  8058. commands and EVERYTHING!
  8059.  
  8060. I didn't want to have to buy a SCSI controller.  But this will save me TONS
  8061. of time!  So it will be worth it.  And since I am getting an extra SIMM
  8062. socket on the SCSI controller I can now buy 2 of these cheap 32 meg SIMMS!
  8063.  
  8064. New plan:
  8065. $430 Blizzard 1260 accellerator
  8066. $ 80 2 32-meg 72-pin 60ns SIMMS
  8067. $130 SCSI-2 module for accellerator.
  8068.  
  8069. 430+80+130+50(shipping etc.) = 690
  8070.  
  8071.  
  8072. * SLICED my foot wide open.  Blood is going everywhere.  I left the case of
  8073.   my A4000 laying on the floor upside down the other day. Now I stepped on
  8074.   it.  This sux.  I just hope it doesn't get infected.
  8075.  
  8076. --------------------------------------------------------------------
  8077. * PROGRAMMING TIPS FROM FD:
  8078.   lock=Lock("PROGDIR:"); then do Info(lock); to _ASK_ if the disk is
  8079.   write-protected without generating any OS requesters.
  8080.  
  8081. Second, easiest way: try to write a temp file (or do a SetDate() or
  8082. something). To prevent the requester from appearing, just load your
  8083. process's pr_WindowPtr field with -1L:
  8084.  
  8085. pr=(struct Process *)FindTask(NULL);
  8086. savedPtr=pr.pr_WindowPtr;
  8087. pr.pr_WindowPtr=-1;
  8088. /* do your testing here */
  8089. pr.pr_WindowPtr=savedPtr;
  8090.  
  8091. this field, if !=0 and !=-1, points to a struct Window whose screen is used
  8092. for requesters that might appear during dos operations. If 0, the WB screen
  8093. (default public screen) is used, and requesters get automatically cancelled
  8094. if -1. You MUST restore the original value in case a CLI program filled it
  8095. before calling chaos. I think VinCEd does it.
  8096. ----------------------------------------------------------------------
  8097.  
  8098. * INClUDED Artur's B Polski descriptions.
  8099.  
  8100. March 12th, 2001:
  8101. Imbe sent in a TON of new gfx!  But only the BEST ones make it into the
  8102. Realms of Chaos. :)
  8103.  
  8104. -----------------------------------------------------------------------
  8105. INCLUDED the following gfx from Imbe into the game!
  8106. Aesculapius
  8107. Agathion (Weird effect :))
  8108. I put in his Brown Bear as the new Grizzly Bear! (It was too blocky so I
  8109. antialiased it just a little)
  8110. Chronomancer!
  8111. Combat Drain Beam (use old Combat Drain Beam as one of the other beam drain
  8112. spells?)
  8113. Consecrate looks great!  So do the variations!
  8114. Cursed Sword (I antialiased it)
  8115. Dao (WOW!) I antialiased it a bit.
  8116. Demonic Touch Beam
  8117. Horse (I fixed it and antialiased it.)
  8118. Marid (WOW!)
  8119. Wight (He looks very scary!)
  8120. Wizard 4 (I had to scoot it over 1 and test it!  The 1st frame was in the
  8121. corpse area) 
  8122. Wizard 5 looks similar to Marid.
  8123. Wizard 8 (I had to scoot this one over also)  HE LOOKS COOL!
  8124.  
  8125. Betrayal (imp turning away from master)  I had to antialias it some and add
  8126. some more detail.
  8127. Subversion (imp facing master being charmed with magic)  I had to antialias
  8128. it some and add some more detail.
  8129. -----------------------------------------------------------------------
  8130.  
  8131. The following gfx and all others that he sent, I put into
  8132. gfx/unusedgfx/Imbe
  8133.  
  8134. I was going to use Arctic Wolf but Xav already made a new one of it.
  8135. Note: If you set your grid to 16,16 it really helps to keep things aligned
  8136. when you move things around.
  8137.  
  8138. Bless looks good, should I use it ?
  8139. The Ghoul looks good but I liked the old ghoul.  What should I do?
  8140. The new confidence spell makes more sense.  But then what would I use the
  8141. candle for?
  8142.  
  8143.  
  8144. I would like to use these as something else but I don't know what?
  8145. Banderlog
  8146. Bolter
  8147. Cloak
  8148. Dark Power
  8149.  
  8150. * Imbe is officially inducted as a member of the Chaos gfx team!
  8151.   Go Imbe go!  Yay Imbe!
  8152.  
  8153.  
  8154. March 13th, 2001:
  8155. My foot and leg feel strange.  Parts of it feel numb.  I don't know if this
  8156. is from some internal infection or if it is just because I have been
  8157. walking around on my foot sideways all day.  It really hurts my foot to
  8158. walk sideways on it, but I'm afraid to just walk normal.
  8159.  
  8160. -------------------------------------------------------------------------
  8161.                    .animbrush EOR drawbacks.
  8162. -------------------------------------------------------------------------
  8163. According to the Motorola 68030 Enhanced 32-bit Microprocessor User's
  8164. Manual:
  8165.  
  8166. Assuming nothing is in the Data Cache and all An are pointing at FASTram:
  8167.  
  8168. move.l Dn,(An)+  = 3 cycles
  8169. eor.l  Dn,(An)+  = 6 cycles
  8170.  
  8171. However if An is pointing to something that is in the datacache then it
  8172. should look like:
  8173. move.l Dn,(An)+  = 3 cycles
  8174. eor.l  Dn,(An)+  = 5 cycles
  8175.  
  8176.  
  8177. The whole point of the .animbrush format is to write directly to chipram
  8178. and allow instant forward/reverse playback and not use double-buffering.
  8179. If the data being written is in chipram as intended then...  everything
  8180. will be much much slower.  Its too scary for me to even think of doing the
  8181. calculations. :)
  8182.  
  8183. But it would look something like
  8184. eor.l Dn,(An)+ = 12 cycles on 25Mhz 030
  8185. eor.l Dn,(An)+ = 20 cycles on 50Mhz 030
  8186.  
  8187. Double, triple or quadruple the times if the gfx mode is a highres/lots of
  8188. colors/doublepal mode.  It probably takes ~80 cycles on a 50Mhz 030 to do
  8189. it in 640x512x8bitplanes doublepal mode.  These are just estimates.
  8190.  
  8191. .animbrush format is looking worse and worse all the time :)
  8192.  
  8193.  
  8194. Maybe we should concentrate on a .animbrush to .anim converter
  8195. and/or a .animbrush to "all tiles on 1 huge screen" converter?
  8196.  
  8197. -------------------------------------------------------------------------
  8198.                 End .animbrush EOR drawbacks.
  8199. -------------------------------------------------------------------------
  8200.  
  8201. We ventured to the computer store.  WOW!  This place turned out to be the
  8202. MEGA-Computer-Store!  It has 180,000 square feet, 50 foot ceilings, it has
  8203. EVERYTHING!
  8204.  
  8205. They have a bunch of halfway reasonably priced tower cases!  I saw some
  8206. tower cases with 250 watt power supply for only $50.00.  There was even a
  8207. mini-tower case (AT) with 200 watt power supply for $29.00!!!!!!!!!!
  8208.  Even _I_ can afford that!!!!  Unfortunately I have now idea how big a case
  8209. needs to be to fit an A1200 motherboard + addons.  So I didn't buy one :(
  8210.  
  8211. I bought 2 EDO 72-pin 60ns SIMMS for $40.00 each.
  8212.  
  8213. I was going to buy some power extension cables and power my drive off of my
  8214. A3000 power supply since my A1200 and A3000 will be sitting next to each
  8215. other anyway, and since my A3000 power supply won't doing anything anyway.
  8216.  
  8217. But then I saw something interesting!
  8218.  
  8219. They have a connector that connects onto my A1200 motherboard 44-pin 2.5"
  8220. IDE connecter and on the other end is a standard IDE 40 pin 3.5" connector!
  8221. And the 2 power pins are connected to a standard hard drive power
  8222. connector!  This means I can mount a 3.5" IDE drive into my A1200 case and
  8223. power it internally!!!!  Or I can mount a 3.5" SCSI drive and power it
  8224. internally!!  Wahoo!!  I just hope it will fit.
  8225.  
  8226. I also bought the largest rubber feet I could find to stick onto my A1200
  8227. to raise it up off the table to allow air flow under the case to keep
  8228. things cool.
  8229.  
  8230.  
  8231. March 14th, 2001:
  8232. ----------------------- Begin LOS Bug ------------------------------------
  8233. * BUG: Sometimes if you press the L, S or C keys in a certain way then you
  8234.   can cheat because the little boxes have erased a small part of the gfx and
  8235.   it allows you to have Line of sight to things that you are NOT supposed to
  8236.   be able to see!  This bug only happens in NONexploration mode.  Exploration
  8237.   mode does all its LOS testing on the ShadowBoard so it is unaffected by any
  8238.   lines drawn onto the screen.
  8239.  
  8240. Modify all keypresses to eliminate that LOS bug!
  8241. DO NOT ERASE THE LINES, yes that is fast but it is incorrect.  The actual
  8242. graphic of the cell must be redrawn! 
  8243.  
  8244. Options:
  8245. 1: Copy the entire screen (or just the affected cells) to a fastram buffer.
  8246.    Restore this from the fastram upon finishing the highlighting.
  8247.    Disadvantage: Slow to highlight.
  8248.    Advantage:    Fast to unhighlight.
  8249.  
  8250. 2. Don't copy anything anywhere.  Just ReDrawCell() the affected cells!
  8251.    Disadvantage: Slow to unhighlight.
  8252.    Advantages:   Fast to highlight.  Doesn't require extra memory.
  8253.    This method WILL BE as fast as option 1 once I implement all images into
  8254.    fastram and use my asm rendering routines!
  8255.  
  8256. ExplorationMode highlighting doesn't need to be changed!  It doesn't test
  8257. the screen pixel for LOS.  It tests the ShadowBoard.
  8258.  
  8259. NonExplorationMode is the only mode with the bug.
  8260.  
  8261. ALL NOW FIXED.
  8262. ------------------------ End LOS Bug ----------------------------------
  8263.  
  8264. * PROBLEM: When the dungeon is composed of Apple Woods, each turn takes
  8265.   forever!  This is because EVERY Apple Wood, performs special combat on
  8266.   EVERY other Apple Wood!  I have now implemented a new menu option for
  8267.   Silent Special Combat.  So this is NOW FIXED.
  8268.  
  8269.  
  8270. March 15th, 2001:
  8271. * Compiled, tested, compressed and mailed Joar's version. (3 hours).
  8272.  
  8273. March 16th, 2001:
  8274. * Conducted many timing tests using BusTest (Aminet:util/moni/bustest.lha)
  8275.   on my A3000.  1 guy on irc tested his Blizzard 060 50Mhz and got bad
  8276.   results but he was using a cgfx screen on his gfx card so I have NO idea
  8277.   what screenmode his chipram was in.
  8278.  
  8279. I discussed accellerators with various people.
  8280.  
  8281. Helped Jerry put his new computer desk together.
  8282.  
  8283. March 17th, 2001:
  8284. * I fixed Imbe's new Pegasus with better antialiasing.  It is a combination
  8285.   of Xav's Pegasus with Imbe's animation.  Teamwork rulez. :)
  8286.  
  8287. * Wasted all day talking to idiots who _allegedly_ wanted to sell their
  8288.   amiga equipment but not REALLY.
  8289.  
  8290. * I compared the timing tests from various people's computers and the
  8291.   results are:  Apollo cards are faster than Blizzard Cards.
  8292.   Apollo SCSI sux and Blizzard SCSI is much better.
  8293.  
  8294.  
  8295. March 18th, 2001:
  8296. Wasted more time shopping for Amiga stuff.
  8297.  
  8298. * Included Artur's Polski Spell descriptions A.
  8299.  
  8300.  
  8301. On 19-Mar-01, Delacroix the Documentator wrote:
  8302.  
  8303. > Just noticed this in the game (first game I've been playing since more than
  8304. > 1 month!)
  8305. > * I threw a hand grenade on a (cloaked) wizard surrounded by 2 generators
  8306. > and 1 cow catapult (and another creature IIRC). But each of the 5 objects
  8307. > gave an alleluiah, and all were completely destroyed, except for the wizard
  8308. > (but they shouldn't have been destroyed since they had enough life points).
  8309. > On the subsequent bonus pannel I got 5 bonus kills: five times the same
  8310. > wizard (who got killed by another creature in the meantime).
  8311.  
  8312. NOW FIXED.
  8313.  
  8314. ************************************************************************
  8315.           Begin:       Random sound bug fixed!
  8316. ************************************************************************
  8317. On 18-Mar-01, Artur Chlebek wrote:
  8318. > Welcome James.
  8319. > On 19-Mar-01 you wrote:
  8320. >>> Have you definately fixed that sound-looping/hanging bug ?
  8321. >> No. I sent the fixed version to a Professional Chaos Player by the
  8322. >> name of Artur Chlebek and he reports the bug is still there
  8323. >> (sometimes).
  8324. > Yup, very rare but it still happens. :(
  8325.  
  8326. But doesn't it seem like it doesn't happen as much since I did the fix?
  8327.  
  8328.  
  8329. >> I played a real game the other day with many ghosts doing many
  8330. >> attacks and the bug never struck. For me the bug seems to be
  8331. >> eradicated.
  8332. >> It honestly seems like a bug in the AmigaOS FindPort() routine.
  8333. > This is the reason of that bug I hope (PatchWork output):
  8334. > exec.library FindPort("JCSound.1") Severity 2: Forbid() missing, unreliable
  8335. > result PC=019FA472 TCB=01801008 ("Background CLI") Data: 00000001 00000001
  8336. > 000003ED 01801E8C 00000018 0060094B 006008ED 00000002 Addr: 01802D61
  8337. > 01802D58 01801E8C 01802D60 018028F0 01802D58 01080CD0 01A8564C ---->
  8338. > 019FA472 - "ram:ChaosDir/JCsound" Hunk 0000, Offset 0000299A
  8339.  
  8340.  
  8341. WAAAAAAAAAAHOOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!
  8342.  
  8343. PATCHWORK RULEZ!!!!!!!!!!!!
  8344.  
  8345. In the future if you ever see any "Forbid() missing" things that is VERY
  8346. BAD and I need to know about them immediately!  Missing Forbid()s cause
  8347. all sorts of TOTALLY BIZARRE, always random, not humanly understandable
  8348. bugs!!!
  8349.  
  8350. I think I ran patchwork before months ago.  But it didn't help me any.  I
  8351. think I was using it to try to track down some startup/shutdown problems
  8352. and I never activated any sound effects.
  8353.  
  8354. * BUG: JCsound is doing a FindPort() without a Forbid() Permit()!!!!
  8355.   This is TERRIBLE!  The reason I didn't know about it, (or even think
  8356.   about it) is because the JCsound source code is in its own dir so Flashfind
  8357.   from "" FindPort doesn't find anything when I am in the Chaos dir. (I am
  8358.   always in the chaos dir.)  I had no idea this code was in there! Its just
  8359.   some cut & pasted code from Aminet to interface to the minrexx.c
  8360.  
  8361. * SOUND BUG NOW FIXED THANKS TO ARTUR CHLEBEK!  ALL HAIL KING ARTUR!
  8362.  
  8363. * JCsound is now at version 1.01
  8364.  
  8365. ************************************************************************
  8366.           End:       Random sound bug fixed!
  8367. ************************************************************************
  8368.  
  8369. * I played a test game and the sounds seem to work 100% now!  I didn't
  8370.   notice the speech bug either!
  8371.  
  8372. * During my test game I found another little flaw with PatchWork involving
  8373.   InitSemaphore(&flashysem).  NOW FIXED.
  8374.  
  8375. * I no longer get those "Semaphore has nesting of 1, expecting 0" messages
  8376.   when I quit the developer version.  This is sort of strange because that
  8377.   message is only involved with the BoardLock semaphore not the flashysem
  8378.   semaphore.  More unsolved OS weirdnesses.
  8379.  
  8380. * Chaos is now allegedly 100% bug-free!
  8381.  
  8382. * Included Xav's new Centaur, Horse, Hybsil and Unicorn into the game.
  8383.   They have MUCH better running animations now!
  8384.  
  8385. * I drank some caffeine (I haven't had any caffeine in around 10 days) and
  8386.   sat down and anti-aliased the Marid and the Wizard 5.
  8387.  
  8388. * I changed 1 frame of the Wight.  I antialiased Wizard 8.
  8389.  
  8390. March 20, 2001:
  8391. I'm using Xav's new animated wall as the Force Wall.
  8392. I thought about using it as the new Power Wall but the Power Wall has 9
  8393. damage variations and the Force Wall graphic has 0 damaged variations.  I
  8394. don't have time to draw the damaged variations right now.  Perhaps later on
  8395. Imbe, Robin or Xav will do them if they want.
  8396.  
  8397.  
  8398. Force Wall*
  8399. It would take some serious magic to get one of these onto your spell list.
  8400. In fact, thus far, no wizard has ever succeeded in getting a Force Wall
  8401. onto his spell list.  These walls are just about impossible to obtain and
  8402. are damn near indestructable. Many military complexes and dungeons
  8403. have been built from these walls for exactly these reasons.
  8404.  
  8405. ForceWallID
  8406. ForceWallHorizontalID
  8407. ForceWallVerticalID
  8408.  
  8409. Max stats and max recovery rates.
  8410.  
  8411. Tested and works perfectly.
  8412.  
  8413. March 21, 2001:
  8414. * I antialiased Wizard 1.  Then I experimented with some lighting fx, added a
  8415.   couple of frames and the result is... I'm not sure if its good or just
  8416.   annoying.  What do you think?
  8417.  
  8418. * Included Xav's new Bird Lord, Pox Shield and Ride gfx.  The Ride gfx is
  8419.   much MUCH better now!  Thank you!
  8420.  
  8421. March 22, 2001:
  8422. * Included the following new gfx from Imbe: -----------------
  8423. Discard (I antialiased it)
  8424. Earthquake Shield
  8425. Falcon (It was totally broken due to large amounts of color 32 splattered
  8426. around.  Then I antialiased it.)
  8427. Fire Shield
  8428. Wizard 7 (I like the magic flowing up and down the staff and the hand
  8429. movement.  I don't like the foot movement.  While the head floating off is
  8430. rather funny, I'm not sure I really like that in a wizard animation.  I
  8431. guess we will vote on this one.)
  8432. Wizard 8 (need to antialias this!)
  8433. Elephant
  8434. ----------------------------------------------------------------
  8435.  
  8436. * Put these Imbe gfx into gfx/UnusedGfx/
  8437.   Fire Elemental (Hmmm.. this one was just too weird for me :)  But I'll try
  8438.   to use it as some new creature.)
  8439.   Emerald Dragon (Its a great _idea_ but the way it worked out, the animation
  8440.   is too jerky and not smoothly flowing.  I think long sweeping motions would
  8441.   work a lot better than the short jerky motions.)
  8442.   Pegasus (I liked the previous Pegasus better.)
  8443.  
  8444. * Included Xav's updated Derro, Nightmare, Omnibiologist, Shadow City
  8445. * Xav's Disection has a VERY cool looking lightning bolt on it and I really
  8446.   like it!  _but_ when I look at 1 (lightning bolt) 2 it makes me think that
  8447.   a lightning bolt will hit the target and split it into 2 parts.
  8448.   So I modified this gfx to look like a 1/2 symbol since the spell cuts
  8449.   everyone's life in 1/2.
  8450.  
  8451. Xav fixed up Wizard 8 while Imbe was making a new wizard 8 so now I must
  8452. 1. Copy the bottom part of Xav's wizard onto the NEW Imbe wizard.
  8453. 2. Copy the head.
  8454. 3. Antialias everything.
  8455. Wow!  That took a long time!
  8456.  
  8457. March 23, 2001:
  8458. * WOW! Joseph just taught me how to do Stencils in Dpaint!  This is totally
  8459.   cool!  If I would have known about this before I could have saved at least
  8460.   30 mins of time when editing Imbe's Wizard 8 to have Xav's new Wizard 8
  8461.   clothes!
  8462.  
  8463. * I Put the fixed JCsound + the Semaphorefix into v3.04 and then UPLOADED
  8464.   v3.05 to Aminet.
  8465.  
  8466. * Zoltan sent in a mod he made himself titled The Mysterious Land, at first
  8467.   I wasn't going to use it because I don't like listening to it "by itself"
  8468.   but now I am going to included it into the game because I think it will be
  8469.   ok music to listen to "in the game" while looking at pix of magic spells
  8470.   and fire breathing dragons and such.  I like the composition of this mod,
  8471.   (its mysterious :) I just wish the instruments were higher quality.
  8472.   This mod was submitted in XPKSQSH format so only users with XPK.library
  8473.   installed will ever hear it.
  8474.  
  8475. * Zoltan sent in another mod titled Land of Magic by Elvis.  Its very nice
  8476.   sounding with excellent instruments but its very very short.  It sounds
  8477.   like an "Artur Chlebek Mod" :)   Maybe someone will lengthen it someday?
  8478.  
  8479. * Sent the new JCsound fix to Robin and Zoltan. (I already sent it to
  8480.   Artur).
  8481.  
  8482. ======================================================================
  8483. * Xav sent in more gfx!
  8484.  
  8485. Drain: The old Drain matches the opposite spell (Haste).  But your new
  8486. Drain looks better so I'm using it.
  8487.  
  8488. Jann: Included into the game.
  8489.  
  8490. Joker: I really like him!  But he looks like a creature, not a magic spell.
  8491. So I don't know what to do with this...  We need 32x32 tiles for this then
  8492. we could make him look like he is a pic on a playing card.  That would be a
  8493. perfect Joker.  For this moment he goes into gfx/UnusedGfx/ while I decide
  8494. what to do with him.
  8495.  
  8496. Radioactive Land: I like this new version much better!
  8497.  
  8498. Thundermare: It looks better but I'm not sure if this should be the new
  8499. Thundermare or the new Iridium Horse?  I guess I will wait till someone
  8500. makes a new Iridium Horse then I will decide. :)
  8501.  
  8502. Vitality: Wow!  Both the new versions are very cool!  I included this into
  8503. the game and I hope I can think up a new spell to use the yellow-heart
  8504. version!  *think* *think* damn I can't think of anything... oh well...
  8505. maybe someday.
  8506.  
  8507. Wizard 7: I don't really like the Leg Movement.  I added your version onto
  8508. the Wizard 7 Screen.  There are now 3 main versions on that screen: The
  8509. James version, The Imbe version and the Xav version.
  8510.  
  8511. Wizard 8: Auugh!  We both did the same work!  My version had some wrong
  8512. color #32 which I fixed.
  8513. I cut & pasted your tile 17 into my version.
  8514. Rest of tiles: I don't know what to do...  Maybe I should stick to coding
  8515. from now on. :)
  8516. ===========================================================================
  8517.  
  8518. On 23-March-01, Joar Berntsen wrote:
  8519. > i moved with a flying carpet into a pit south of the wizard, hoping i would
  8520. > float over it, not!. then i did the same to a bat,, not! :)
  8521. > to me, the wizard is north of the pit i falled into, and still alive.,.???
  8522.  
  8523. * BUG: If a mounted wizard moves into a pit then the wizard becomes "there
  8524.   but not there".  He isn't there so he can't move and he can't be killed.
  8525.   But he is there so he can still cast spells.  NOW FIXED.
  8526.  
  8527. * BUG: If an Aerial Servant is on a scroll and flies 10 squares away into
  8528.   a pit, then the Aerial Servant dies as normal but the scroll he was
  8529.   standing on disappears also!  Even though the scroll was nowhere near the
  8530.   pit!  NOW FIXED.
  8531.  
  8532. * BUG: If a creature is standing on a dead body and moves into a pit then
  8533.   the dead body disappears!  NOW FIXED.
  8534.  
  8535.  
  8536. March 24, 2001:
  8537. * SLOW: Aerial Servants always take a couple of seconds to decide who to
  8538.   attack.  I think this is due to the DangerousnessRating() routine being
  8539.   very very slow.  It is filled with lots of redundant array bounds checking
  8540.   and uses lots of array indexes instead of pointers.  I have now rewritten
  8541.   this so it should be at least 2x as fast now.  NOW FIXED.
  8542.  
  8543. * I speeded up RaiseDeadRating() in the same manner as
  8544.   DangerousnessRating();
  8545.  
  8546. On 24-Mar-01, Robin Schmidt wrote:
  8547. > You should teach the computer that sleeping creatures are not really worth
  8548. > attacking. Situation: Vampire (sleeping) next to a Green Dragon (enemy),
  8549. > both next to one of eight wizards who all play in the same team (thus making
  8550. > the danger of someone calling Wake on the vampire void (if one can say
  8551. > that?)). The wizard (upgraded with Sword of Sassenrath) attacked the
  8552. > vampire, the dragon then killed the wizard. Ouch!
  8553.  
  8554. NOW FIXED.
  8555.  
  8556. * Implemented a table of CellAddress[] to store the address of the first
  8557.   byte of each cell on the board.  This allows fast and easy lookup by my
  8558.   upcoming asm rendering/animation routines.
  8559.  
  8560. March 25, 2001:
  8561. Think about replacing the DrawCell(&NothingImage,cell) with a bunch of
  8562. move.w's. Redrawing the line of sight on a large empty screen is VERY
  8563. slow in non exploration mode!  This will actually be very easy!
  8564. Just copy the code from the cell highlighting !!!  Wow!
  8565. It will be SUPER FAST!
  8566.  
  8567. Go through the program and actually do this!
  8568. DrawCell(&NothingImage,cell); -> DrawBlankCell(cell);
  8569. DrawCellShadow(&NothingImage,cell); -> DrawBlankCellShadow(cell);
  8570.  
  8571. Disadvantages:
  8572. 1. This routine is useless once terrain is implemented.
  8573. 2. One more routine to upgrade into 256 colors mode.
  8574.  
  8575. Advantages:
  8576. 1. ReDrawCell(cell) will be greatly speeded up when used to unhighlight a
  8577.    bunch of blank cells.
  8578. 2. The Animator task will be much faster when having to REDRAWALL==YES;
  8579.    Such as exiting an info panel in Exploration Mode.
  8580.  
  8581. * IMPLEMENTED DrawBlankCell() and DrawBlankCellShadow()
  8582.  
  8583. * TIMING TEST on my A3000 25Mhz 030:
  8584. Doing 1000000 Nothing takes 48 frames.
  8585. 36743 (36695) frames to DrawCell(&NothingImage,0);  27.2 images per frame
  8586.  4399 ( 4351) frames to DrawBlankCell(0);          230   images per frame
  8587.  
  8588. As usual my custom routine is 8.4x times faster than the OS-based routine.
  8589.  
  8590. The _AMAZING_ thing is that once I have time to implement my asm cell
  8591. rendering routines that I wrote 3 years ago, ALL gfx drawing will go almost
  8592. as fast as the DrawBlankCell routine!  The new routines will draw a pic of
  8593. a monster almost as fast as a blank cell.
  8594.  
  8595.  
  8596. * BIZARRE BUG: If you are playing a game in Exploration Mode and for some
  8597.   reason a requester should appear onto the game screen (for example a "Disk
  8598.   is Write Protected" requester) then you can cheat by moving the window
  8599.   around.  It somehow _magically_ uncovers any stuff (creatures, scrolls,
  8600.   inanimate objects, anything) in the unexplored territory!  Yet it doesn't
  8601.   mess up any gfx at all!  It's totally bizarre!  I always wondered how on
  8602.   Earth this was possible.  Now I figured it out!  It was all because when I
  8603.   set up the ShadowBoardRastPort I just copied the rastPort of the main board
  8604.   into it!  This copied the layers information which caused the OS to provide
  8605.   this most unique and amazing behavior.  I have now changed the code to just
  8606.   do an InitRastPort(ShadoBoardRastPort); so this is all NOW FIXED.
  8607.  
  8608.  
  8609.  
  8610. * Included: Artur's Polski spell descriptions for the 16 new spells
  8611.   introduced after v3.04.  His spell description translations are now
  8612.   complete except for the 6 new spells I added in the last couple of
  8613.   months.
  8614.  
  8615. * Included Artur's new Vampire attack and death sounds.  They are
  8616.   high-quality but very long.  The attack sound is about 6 seconds long!  I
  8617.   think people will complain about this.  Oh well then they can make their
  8618.   own new Vampire attack sound or they can turn off the combat sounds.
  8619.  
  8620. March 26th, 2001:
  8621. * Included Robin's complete 366 Deutsch spell descriptions, latest
  8622.   Deutsch.catalog and Talklistsdir/Deutsch file.
  8623.  
  8624. On 25-Mar-01, Robin Schmidt wrote:
  8625.  
  8626. > AI: 1. I just saw a Basalt Golem shoot at a Shadow Dragon who has already
  8627. > been stunned. This is stupid. There've been other targets in range.
  8628.   NOW FIXED.
  8629.  
  8630.  
  8631. * STUPID: Basalt Golems shoot things that have 0 movement points. NOW FIXED.
  8632. * STUPID: Spectators attack things that have 0 manuverability points.
  8633.   NOW FIXED.
  8634.  
  8635. * STUPID: Spectators keep constantly attacking my Conwell's Cow Catapult
  8636.   even though it already has 0 maneuverability and they aren't hurting
  8637.   it at all!  NOW FIXED.
  8638.  
  8639. * STUPID: All creatures which attack only non-lethal stats (such as Maneuver,
  8640.   Move, Combat, Ranged Combat, Special Combat, all Recovery rates) will
  8641.   frequently make useless attacks against creatures whose stats are already
  8642.   as low as they can go!  NOW FIXED.
  8643.  
  8644. * I optimized the IsStupidAttack() and IsStupidShot() routines to speed them
  8645.   up.  But then I had to add tons of new code to check for useless attacks
  8646.   so all in all it will be just as slow as before or even slower.  I think
  8647.   this is why it takes so long for an Aerial Servant to decide who to attack;
  8648.   its because he must check nearly every square on the board if it is a
  8649.   stupid attack or not.  Its a rather large hunk of code that must be
  8650.   executed for each sqare.
  8651.  
  8652. * I added code to IsStupidAttack() and IsStupidShot()to check for and avoid
  8653.   useless healing attacks.  Such as Hippocrates healing someone who already
  8654.   has MAX_LIFE.  I've never seen such a thing happen, and in fact I think
  8655.   the other AI routines prevent this from ever happening... but the code is
  8656.   in there now just in case.
  8657.  
  8658. March 27th, 2001:
  8659. * PROBLEM: If you attack an enemy Hippocrates' Combat statistic it actually
  8660.   gets better!  The Hippocrates becomes a better healer than ever before!
  8661.   NOW FIXED.  See below.
  8662.  
  8663. * PROBLEM: If you heal your Hippocrates' Combat statistic (for example
  8664.   shooting him with Aesculapius) then the Combat actually gets worse!
  8665.   It can even become positive so that Hippocrates becomes a fighter like
  8666.   everyone else!  NOW FIXED.  See below.
  8667.  
  8668. I think the combat routine needs to be modified so that if a creature with
  8669. positive combat attacks the Ranged Combat of another creature and that
  8670. creature has negative Ranged Combat then the Ranged Combat should NOT be
  8671. lowered further but in fact should be raised toward 0, thus damaging that
  8672. creature's healing ability.
  8673.  
  8674. * CHANGED: Now if you attack someone's Combat, Special Combat or Ranged
  8675.   Combat you make their stat move towards 0.  You do NOT mathematically
  8676.   lower it.
  8677.  
  8678. I think several people had asked for the above change over the years
  8679. (I'm not sure, I can't remember.)  So hopefully everyone will be happy now.
  8680. :)
  8681.  
  8682.  
  8683. On 26-Mar-01, Robin Schmidt wrote:
  8684.  
  8685. > On 25-Mar-01, Robin Schmidt wrote:
  8686. > ->> How many emails did I send you today? :) Anyway: I finished (!) the
  8687. > ->> translation of the talklists today,
  8688. > -> I thought Deutschian Grammar was too complicated for talklists? :)
  8689. > Well, as I told you it was like impossible to just translate the talklists
  8690. > to German. But I totally re-wrote/re-arrangend the lists, so that now there
  8691. > is a perfect German translation. This meant to write some lists twice or
  8692. > even thrice to solve some problems with singular/plural and
  8693. > male/female/neutral versions of one and the same word. I'm so great!
  8694. > ->> but there is something wrong. It worked
  8695. > ->> all okay for some turns and then crashed (Guru). I think there is a loop
  8696. > ->> somewhere. You told me of a program (arexx?) you have to check/build
  8697. > ->> talklist sentences. I haven't got this. Could you send it to me, please?
  8698. > -> Ok I attached the Arexx scripts for checking talklists.
  8699. > -> Please let me know if these help you any.
  8700. > Well, they did. There wher serveral 'Can't find list xxx' errors due to
  8701. > typing mistakes. I hope this caused the crash, but I can't be sure of
  8702. > course. But when I used the GenerateText.rexx everything looked fine.
  8703. > I had to change the catalog again in order to translate the talklist
  8704. > correctly. I hope this works.
  8705. > Attached are the spells, the catalog and the talklist. You can append them
  8706. > to your verion.
  8707. > L A T E R:
  8708. > I had another try with the talklists. Chaos still crashes sometimes when the
  8709. > computer wizards talk. CheckTalkLists.rexx cannot find anything, so it can't
  8710. > be an infinite loop. Perhaps you have more luck and find something.
  8711.  
  8712. What the bug was:  I had a string on the stack that was 40 bytes long.
  8713. I remember making it only 40 bytes when I first coded the routine because I
  8714. thought I was going to make the routine recursive.  Thankfully I was smart
  8715. enough to make it use a loop instead of recursion.  But I didn't think to
  8716. increase the size of that string to something really huge once I prevented
  8717. recursion.
  8718.  
  8719. The string is used to hold the _name_ of a list.  If you had any listnames
  8720. longer than 39 chars then some other stuff on the stack would get
  8721. overwritten.  Like for instance the other variables and the return address.
  8722. Upon executing the RTS instruction *BOOM*.
  8723.  
  8724. The Deutsch talklists file has 2 lists longer than 40 chars.
  8725.  
  8726. So I fixed it by making the maximum length of a listname be 256 chars AND I
  8727. put error checking code in to return an error if any listname is over 256
  8728. chars.  NOW FIXED.
  8729.  
  8730. * NOTE ABOUT TALKLISTS: You should try to make sure that your generated
  8731.   sentences cannot go over about 220 chars because that is about the
  8732.   realistic maximum amount of text that will fit onto the bottom of the
  8733.   screen.  However if you accidentally exceed this, no harm will be done
  8734.   because the internal buffer is 512 bytes long for the entire sentence.
  8735.   If you somehow generate a sentence longer than 512 bytes then *BOOM*.
  8736.  
  8737.  
  8738. On 27-Mar-01, xavnet wrote:
  8739. > News:
  8740. > - Virtue: you're going to have a shock! :)
  8741. > It 's a symbol of a virtue... I think... But nowadays... I'm not sure...
  8742. > :-D
  8743. > - Vampire : new version.
  8744. > - Fire Shield : updated
  8745. > - Earthquake Shield : updated
  8746. > - Discard : updated. I add a trash and I enhanced the costume.
  8747. > - Cat Lord : updated.
  8748.  
  8749. * Included: Xav's new gfx:
  8750.   Cat Lord
  8751.   Discard
  8752.   Earthquake Shield (Nice Shading!)
  8753.   Fire Shield (Nice Shading)
  8754.   Vampire (I always liked the old Vampire.  He's not perfect but I like
  8755.   gfx with waving cloaks :)  Old Vampire's legs could have been better.  But
  8756.   the new Xav Vampire is a better animation and design so I'm using it.)
  8757.   Virtue: HeheheheheHAHAHAHAHA OWW!  I'M DYING LAUGHING! :-D
  8758.  
  8759.  
  8760. * Included: Imbe's new gfx:
  8761.   Falcon (He added 1 frame) There was a line of color #32 in the corpse
  8762.   tile which I removed.  I antialiased all frames a little bit.  The Falcon
  8763.   is Awesome!
  8764.  
  8765.   Fly: I antialiased it and improved the back wing.  If this were an
  8766.   animation it would make a FANTASTIC Pixie creature!
  8767.  
  8768.   Generator: COWABUNGA!  Nice animation!  NOTE to Imbe: please press the
  8769.   "g" key to turn on the grid (16x16) when you move the old animation around
  8770.   on the screen.  That way it is always placed correctly.  Thank you. :)
  8771.  
  8772.   Ack!  I just loaded the Generator into the game and some of the tiles are
  8773.   not placed correctly!  Many gfx bugs in this!  Please please please
  8774.   _always_ turn on the Grid with the "g" key in Dpaint when moving and
  8775.   placing tiles!  The Grid function Rules!
  8776.  
  8777.   1 hour later: The new Fixed Generator arrived and I included it.  Thank
  8778.   you for the fast response. :)
  8779.  
  8780.   Ghast: Wow, this is weird looking.  I antialised it and made it look much
  8781.   better but I think Xav needs to examine this gfx.  Be sure to watch it as
  8782.   an actual animation in the game.  It doesn't look like a Ghast to me.  It
  8783.   looks like some sort of strange alien creature or sea creature.
  8784.  
  8785.   Ghoul:  I don't know what to do about antialiasing this. (???)  I leave
  8786.   it to the professional. :)  The red dots animation could be somehow
  8787.   better.
  8788.  
  8789.   Giant Rat: I antialiased the tail.
  8790.  
  8791.  
  8792. * Imbe New Cell Effects:
  8793.   Attack: Its very nice!  But I already made a new attack cell effect out
  8794.   of Xav's animation + my numbers.  So we need to think up a reason to use
  8795.   this NEW Imbe attack fx.  Does anyone have any ideas?
  8796.   For healing attacks?
  8797.   For poisoning attacks?
  8798.   For attacks against statistics other than life?
  8799.   ???
  8800.  
  8801.   Twirl: WAHOO!!!!  Finally a new Twirl gfx!!!!  I TOTALLY _HATE_ the old
  8802.   Twirl cell effect!  The old Twirl gfx hurt my eyes!  This new one is much
  8803.   better!  But it could be better still.  I quickly single-pixel
  8804.   antialiased it but it really needs double-pixel antialiazation.
  8805.  
  8806.   I just tested it in the game and it looks REALLY COOL!!!!!!!!!
  8807.  
  8808.   NOTE TO EVERYONE: Cell Effects can use LOTS of frames, like 50 or 100 or
  8809.   whatever.  I can _EASILY_ play cell effects animations at 25 or 50 fps so
  8810.   we can use _REALLY_ detailed animations on these if you want to make them.
  8811.  
  8812.  
  8813.  
  8814. * Imbe gfx not included (yet):
  8815.   Flesh to Stone: I liked the current Flesh to Stone better.
  8816.  
  8817.   Free All: Nice Graphic!  But if I use it, it would have to be for "Free"
  8818.   not "Free All" I think.  I think Free and Free All should be graphically
  8819.   related.  I don't know what to do about this one.  I am putting it in
  8820.   UnusedGfx/Imbe until we figure something out.
  8821.  
  8822.  
  8823.   Floating Eye:
  8824.     Things I like: Its animated.
  8825.  
  8826.     Things I like about the original floating eye: It has a Pupil.  It is
  8827.     bloodshot.
  8828.  
  8829.   I don't know what to do about the Floating Eye gfx.  I will put it into
  8830.   UnusedGfx/Imbe/ for now.
  8831.  
  8832.  
  8833.  
  8834. March 28, 2001:
  8835. Imbe Writes:
  8836. > many times when im in the spell selection, i dont feel I have an overview of
  8837. > my spells. If they were more organized, it would be much more comfortable.
  8838. > examples:
  8839. >
  8840. > m=growth, misc       cc or cm or cs        cc or cm
  8841. > s=status spells      cc    cm    um        cu    cs
  8842. > c=creatures          uu    cm    cs        uu    cs
  8843. > u=undeads            uu    cm    um        uu    us
  8844. >                      mm    us    cs        mm    us
  8845. >                      mm    us    um        ss    us
  8846. >                      ss    us    cs        ss    us
  8847. >                      ss    us    um        ss    ms
  8848. > or u could just display them by order, e: c-u-s-m  above.
  8849. > I dont know if its the actual number of spells, but u get the idea.
  8850.  
  8851. If I implement this, I will have a "Sort" button that you click on and it
  8852. will sort your list of displayed spells for you.  This way you will see the
  8853. spells in their actual order (this is very important when you stop casting
  8854. spells and get lots of bonus spells because the ones on the bottom get
  8855. pushed off.)  But if you click the "Sort" button then you will see them in
  8856. the sorted order.
  8857.  
  8858. Ok, so now I could easily implement this... BUT... what if someone doesn't
  8859. like this particular sorting methodology?  What if they want undeads listed
  8860. first, then magic spells, then all other creatures?
  8861.  
  8862. Or what if they want "weird attackers" like Mind Flayers and Juju Zombies
  8863. listed first?  Or any other weird things?
  8864.  
  8865. This would mean we would need a very fancy GUI system so that each user
  8866. could set their _own_ personal preferences for how the list is sorted.
  8867. Later on this GUI can be extended to provide support for customizing what
  8868. is shown at the bottom of the screen.  It doesn't have to say "Unicorn
  8869. (Life 10)"  It could say "Unicorn life 10, combat 15" (in different colors)
  8870. or something.  There are an infinite number of ways to customize how things
  8871. look.  And I have _no_ ideas how to code the GUIs for them.
  8872.  
  8873. As everyone knows, I _hate_ programming GUIs because there are an infinite
  8874. number of ways to design them, and many GUIs are just as good as many other
  8875. GUIs but they look totally different.  Some things are factually easier,
  8876. but a lot of it is just subjective opinion style.
  8877.  
  8878. So this now brings up something I've been thinking about for a long long
  8879. time: Allowing Chaos to be extendible via external code modules.  These
  8880. external programs could be coded in any lanugage: C, Asm, Blitz Basic 2,
  8881. Modula 2, E, Arexx, maybe even AMOS (oh no!).  You could even use MUI or
  8882. Datatypes if you wanted.
  8883.  
  8884. So we would have to decide this question:
  8885. Should the external programs be loaded via "LoadSeg()" or should they be
  8886. run as a cli command?  (Or should there be support for both options?)
  8887.  
  8888. What functions within Chaos would you need access to in order to make your
  8889. coding easier?
  8890.  
  8891. What variables would you need access to?
  8892.  
  8893. On 28-Mar-01, Robin Schmidt wrote:
  8894. > Greetings, Master Conwell!
  8895. > I did it all ... I meditated ... I didn't eat or drink for a week ... I
  8896. > hadn't had sex for a year and a day ... I didn't curse or swear ... I
  8897. > concentrated all my powers. Then when I was ready I opened the Dark Gate and
  8898. > passed it ... I walked through fire and ice ... faced storms and floods ...
  8899. > I subdued the One ... I prepared myself. At last I started Chaos 3.11 ... it
  8900. > looked all fine, too fine for my suspicious eyes ... I started to search ...
  8901. > I found some things you should improve ...
  8902.  
  8903. Wow!  You really should think about writing more spell descriptions with a
  8904. writing style like that!
  8905.  
  8906.  
  8907. > 1. The Goblin Bomb looks ugly. Why didn't you include my great (?)
  8908. > explosion?
  8909.  
  8910. I told you I've been overloaded with coding requests and gfx requests and
  8911. AI requests and shopping for an Apollo 060 and etc. etc.  So I have not
  8912. programmed in your 3x3 tiles thing yet.  I figured I could do it when you
  8913. figured out how to generate twice as many frames out of the explosion.
  8914.  
  8915. I work on Chaos for 8 hours a day every day!  But I have 32 hours of work
  8916. that need to be done each day!  So I fall behind by 24 hours every day. :(
  8917.  
  8918. > 2.4. I think, independant
  8919. > generators shouldn't create Magic Carpets as well as Grim Reapers.
  8920.  
  8921. I will think about hacking in some code to stop Generators from producing
  8922. Grim Reapers.  It depends on what others think about this.
  8923.  
  8924. I've only had 1 game where a generator produced a Grim Reaper.  It was very
  8925. interesting.  On the one hand the Grim Reaper damaged a lot of independent
  8926. creatures and killed some too.  But it also killed a LOT of pieces of wall
  8927. in the dungeon.  This allowed all the other independent creatures to move
  8928. into my area and attack me!  So it really all sort of balanced out.
  8929.  
  8930. The Grim Reaper also kept stealing my bonus spells.  It was very annoying.
  8931. It caused me a lot of damage and slowed down my invasion killed some of my
  8932. Lions and I was very glad when I was _finally_ able to kill it.
  8933.  
  8934. > That
  8935. > makes no sense for the independants. Or can make Agents (Necromancer, etc.)
  8936. > use of the carpet? Nice idea anyway... :)
  8937.  
  8938. Nice idea... but a  HUGE ridiculously large amount of coding and AI work so
  8939. it won't happen this year.
  8940.  
  8941.  
  8942. On 28-Mar-01, xavnet wrote:
  8943. > Hi James!
  8944. > News:
  8945. > - Vampire
  8946. > I wanted to morph it into a bat... So I used the Morph feature of DPaint 5,
  8947. > but I was disappointed by the result... So I had to work frame by frame on
  8948. > this morph anim.
  8949. > You'll find the 2 versions in the file.
  8950.  
  8951. Morphing works better with Explosions. :)
  8952.  
  8953. This is a REALLY COOL animation!!!!!!!
  8954.  
  8955.  
  8956. > - Iridium Horse : new version.
  8957.  
  8958. Ok, I've looked at the Iridium Horse and Thundermare and etc.
  8959.  
  8960. I included your Iridium Horse as the new Iridium Horse.
  8961.  
  8962. I will take your Thundermare graphic and remove the horizontal line
  8963. animation on its body and then that will be the new Thundermare.  DONE.
  8964.  
  8965. There will be a system to the gfx:
  8966. A horse-alike creature which is undead (or can attack undeads) gets a
  8967. horizontal line animation on its body.  All other horses just look normal.
  8968.  
  8969. Since Thundermares aren't undead and they can't attack undeads then they
  8970. don't have that body animation.
  8971.  
  8972.  
  8973. Iridium Horses aren't undead but they can attack undeads so they get a not
  8974. very bright animation on their body.  This works out great!
  8975.  
  8976.  
  8977.  
  8978. On 28-Mar-01, Robin Schmidt wrote:
  8979.  
  8980. > 2. The sentences like "Gandalf's Vulture munches on some Pig meat. Life +4"
  8981. > are not correctly displayed when you play in German. This is due to the fact
  8982. > that I put some of those '%3s' from the catalog-file to the talklist-file to
  8983. > ensure a correct translation. Can you do anything about that or do I have to
  8984. > make a simple one version translation that says 'Your creature ate some
  8985. > meat. Life increased.' everytime?
  8986.  
  8987. Wow!  You put parameters into the talklists!!!  That was very clever!
  8988.  
  8989. The reason it wasn't working for you was because I was plugging in the
  8990. parameters first, then calling ReplaceLists().  But I can almost just as
  8991. easily call ReplaceLists() first and THEN plug in the paramters.  But I
  8992. will have to change the code on each individual print statement for it to
  8993. start working correctly.
  8994.  
  8995. So leave your talklists and catalogs as they are.  They are very good.  I
  8996. will fix the program to allow for this amazing new grammatical construct.
  8997.  
  8998. OK, I now hacked in special code for the 2 lines in the catalog file that
  8999. need to have "parameters in talklists" capability.  Line 206 and 49.  If
  9000. this works ok and you need more catalog lines with this capability then
  9001. maybe I'll make a new system that automatically allows talklists to work on
  9002. ANY and EVERY catalog string.  Would that help you any?
  9003.  
  9004.  
  9005. > 3. What is the difference between Combat and Chainsaw (except the sound :) ?
  9006.  
  9007. None. (except Chainsaw is more satisfying :)
  9008.  
  9009. Combat doesn't need betatesting but Chainsaw does.  Does that count as a
  9010. difference?  :)
  9011.  
  9012.  
  9013. > 4. When a computer wizard casts Tribal Dance the game waits for a
  9014. > mouse-click. There is no sound in this time. I deactivated speech.
  9015.  
  9016. The only thing I can figure is that you just didn't have enough chipram
  9017. available to play the music.  So I added some error checking code.  Now if
  9018. it can't play the mod for some reason, an error message will be printed.
  9019.  
  9020. > 6. Is there anything like 'lethal strikes' or something like that? I had a
  9021. > Vulture with combat 5 attacking a Derro with 19 life. It killed the Derro
  9022. > with one strike!?
  9023.  
  9024. Yes, but only if impurities are turned on.
  9025.  
  9026. * I sent the help files, the latest .catalog file and the 8 new spell
  9027.   descriptions files to FD for translation and proofreading.
  9028.  
  9029.  
  9030. March 29, 2001:
  9031. * I recieved FD's translated help files, catalog file and all 8 new spell
  9032.   descriptions!  In only 24 hours!  Frédéric Delacroix earns "Fastest
  9033.   Translator in the West" award! (again)
  9034.  
  9035. Frederic Delacroix wrote:
  9036. > Translating is easy and relaxing :-)
  9037.  
  9038. That's what I keep telling the other translators... but they don't believe
  9039. me for some reason.
  9040.  
  9041.  
  9042. * I spent some hours trying to figure out what is causing Robin's sound
  9043.   bugs.  He reports the Ghost sound still gets stuck in a loop sometimes.
  9044.   I found nothing useful so far. :(
  9045.  
  9046. * Included Xav's new Abath gfx.
  9047.  
  9048. On 29-Mar-01, Joar Berntsen wrote:
  9049. > this is my gfx dir at this time, but it stops at reveal or the last
  9050. > celleffect and displays a yellow "out of memory" message, then quits, 
  9051. > i know it doesnt have anything to do with my wierd attack gfx.
  9052. > and there are no patches in the system.
  9053. > because of this, i cant play chaos anymore :(
  9054.  
  9055. OOPS!  Sorry!  I forgot to include the "wrap down to the next line" code
  9056. when processing CellEffects in IFF files.  NOW FIXED.
  9057.  
  9058. I am compiling you a new version now, but it takes over an hour to compile
  9059. Chaos these days.
  9060.  
  9061. Attached: V3.13 main executable.
  9062.  
  9063.  
  9064. On 29-Mar-01, Robin Schmidt wrote:
  9065.  
  9066. > A wizard just cast Chainsaw twice on one creature?!?
  9067.  
  9068. NOW FIXED.
  9069.  
  9070.  
  9071. > Why do creatures with combat 0 attack?
  9072.  
  9073. The way of the warrior is not easy.  It requires much practice.  With
  9074. enough practice a creature can improve its attack ability.
  9075.  
  9076.  
  9077. > Independant creatures, that get discovered by killing a growth, can move in
  9078. > the same turn, can't they? But when their position is above the other
  9079. > independant creature that discovered it, it can't move.
  9080.  
  9081. Yes that is true.  You have discovered another game secret.
  9082.  
  9083.  
  9084. > Dragons scream when you touch them with a chainsaw!!! NIIICE!
  9085.  
  9086. Hehehe }:>
  9087.  
  9088.  
  9089.  
  9090. Imbe inscribed the following scroll on March 29, 2001:
  9091. > doublecatlord: i chose catlord, and i have double, but i dont seem to get
  9092. > permission to cast catlord twice. why not, or is it a bug?
  9093.  
  9094. "There can be only 1!" (tm) :)  Cat Lord at a time.  It says so in the
  9095. rules somewhere. :)
  9096.  
  9097.  
  9098. > mintgen: the generator near the middel gets in mint condition, allthough i
  9099. > have attacked it with my cobra so it has no recover left, and attacked with
  9100. > eceryone else in the area.
  9101.  
  9102. "Real" Generators are special.  They are magical and have super powers.
  9103. They have infinite healing abilities and don't use their Life Recovery
  9104. Rate.  In order to kill a Real Generator's Life Force you must kill all 63
  9105. points in 1 turn.  That is part of the strategy of the game. :)
  9106.  
  9107.  
  9108. March 30, 2001:
  9109. * I spent all day reading the RKRMs over and over and reading the DevCD
  9110.   over and over and conducting experiments to try to make JCsound crash.
  9111.   No matter what I did, I couldn't make it crash.
  9112.   Here are some things I tried:
  9113.  
  9114. Theory 1:
  9115. JCsound is loading from the RAM: disk and some other program kicks in
  9116. and writes or reads from the RAM: disk at the same time.  This causes a
  9117. crash.  This theory is mostly disproven, see Experiment 1.
  9118.  
  9119. Experiment 1:
  9120. I had a loop of JCsound playing over and over again.
  9121. I then went to CED and continuously wrote out large files to the ram disk.
  9122. No crashes, no problems.
  9123.  
  9124. Lots of stuff deleted...
  9125.  
  9126. March 31, 2001:
  9127. * Included Robin's Deutsch help files.
  9128. * Robin sent in a bunch of cell effects animations!  Some of them are 100
  9129.   tiles long!  WOW!  But I'm in the middle of coding on JCsound so I will
  9130.   have to look at them and/or program them in later.
  9131.  
  9132. * Imbe sent in a new Vulture but I haven't had time to decide if I should
  9133.   use it as a Vulture or as some other flying creature?
  9134. * Imbe sent in new Goblin and Gobln Bomb gfx which I put into
  9135.   gfx/UnusedGfx/
  9136.  
  9137.  
  9138. ********************************************************************
  9139.                       More work on JCsound
  9140. ********************************************************************
  9141. Test my combat ghost killing thousands of things! over and over!  To see if
  9142. it crashes.  No crashes!
  9143.  
  9144. The GetMsg() code looks suspicious.  NO!  I send 1 message and I get 1
  9145. message!  That is all!!!!
  9146.  
  9147.  
  9148. Try to investigate speech routines stack variables and things.
  9149. There are no stack based variables in the speech routines!  How could this
  9150. be messing up!?!?
  9151.  
  9152. Check syntax of DeletePort!  Its ok.
  9153.  
  9154. 6. Make a test program that reads and writes files to/from the RAM: disk
  9155.    while repeatedly playing JCsound samples FROM the RAM: disk.
  9156.    I tried this and nothing bad happened, although the left and right
  9157.    channels become desynchronized.
  9158.  
  9159. 7. Set the buffers on the drive to 0!  Then try to make it lock up!
  9160.    IT NEVER LOCKS UP!  But it does cause the channels to become
  9161.    desynchronized!
  9162.  
  9163. Compiling Optimization Stuff------------------------
  9164. JCsound is currently 18040 bytes.  It is being compiled with data=far for
  9165. some unknown reason?
  9166.  
  9167. * I recompiled with code=near
  9168.   code=near made no difference because it defaults to code=near anyway.
  9169.  
  9170. * I recompiled with data=near
  9171.   data=near made it 16168 bytes!  I just saved 1872 bytes!  Over 10% size
  9172.   reduction!
  9173.  
  9174. * I recompiled with parameters=register
  9175.   parameters=register doesn't work because I lost my minrexx.c file somehow
  9176.   Ok I redownloaded minrexx.c from Aminet.
  9177.   parameters=register made it 15088 bytes.
  9178.   TOTAL REDUCTION = 2952 bytes (16%!)
  9179.  
  9180. My old minrexx.o was 1972 bytes.
  9181. My new minrexx.o is  1620 bytes.
  9182.  
  9183. I had to make some changes to Arexx.c and minrexx.c to get them to compile
  9184. with the OS 3.1 include files.
  9185. ----------------------------------------------------------------------------
  9186. END JCsound 1.2
  9187.  
  9188. BEGIN JCsound 1.3
  9189. Copy everything over to sc:JCsound1.3/ in case I mess something up.
  9190.  
  9191. * PROBLEM: When playing a sample with the -2 option the startup code is
  9192.   doing this:
  9193.   1. Allocate 30k chipram buffer as left buffer 1
  9194.   2. Allocate 30k chipram buffer as right buffer 1
  9195.   3. Free right buffer 1 because this is a MONO sample and there is only 1
  9196.      sound going out to both speakers.
  9197.   4. Allocate 30k chipram buffer as left buffer 2
  9198.   5. Allocate 30k chipram buffer as right buffer 2
  9199.   6. Free right buffer 2 because this is a MONO sample and there is only 1
  9200.      sound going out to both speakers.
  9201. Needless to say this is wasteful and makes it slower for JCsound to get
  9202. started.  So I have now reduced it to:
  9203.   1. Allocate 30k chipram buffer as left buffer 1
  9204.   2. Allocate 30k chipram buffer as left buffer 2
  9205.   NOW FIXED.
  9206.  
  9207.  
  9208. * PROBLEM: Sometimes when playing sound with the -2 option (The -2 option
  9209.   is almost always used when playing sounds in Chaos) the sound channels
  9210.   start at different times.  They are unsynchronized.  This causes no real
  9211.   harm but I think Artur complained about it so...
  9212. * I spent some hours studying the RKRMs and the Amiga C Manual and I
  9213.   finally figured out how to start 2 channels playing simultaneously.
  9214.   IF the RKRMs are correct and IF the Amiga OS audio.device functions as
  9215.   specified then it should now be IMPOSSIBLE for the channels to become
  9216.   desynchronized.  NOW FIXED.
  9217.  
  9218. Actually it is not TOTALLY IMPOSSIBLE for the channels to become
  9219. desynchronized, all you would have to do is to disable multitasking for
  9220. around 1.2 seconds (assuming 30k buffers) then things might get
  9221. desynchronized.  But 1.2 seconds is such an incredibly long time to disable
  9222. multitasking that I'm not even going to worry about it.
  9223.  
  9224. But if the buffers were set to only 4K then multitasking would need to be
  9225. disabled for only about 1/7th of a second to possibly cause things to
  9226. become desynchronized.
  9227.  
  9228. Actually the books don't say anything about keeping double-buffering
  9229. synchronized.  You can use the OS to START 2 sounds playing at the same
  9230. time and then you just keep queueing up more WRITE commands but it never
  9231. says there is any guarantee that the future WRITE commands will be executed
  9232. simultaneously.
  9233.  
  9234. The audio.device docs clearly state that you cannot issue 1 write command
  9235. to multiple channels.
  9236.  
  9237. So what I am trying to say is that if you were to play a 10 minute long
  9238. sample then maybe the 2 sides of sound would slowly start getting more and
  9239. more desynchronized?  I donno.  If you try this under a heavy cpu and heavy
  9240. hard drive access load then please let me know what happens.
  9241.  
  9242. If the audio.device is programmed correctly then there will be NO problems!
  9243.  
  9244. April 1, 2001:
  9245. * I made some more optimizations to save 128 bytes of code size.
  9246.  
  9247. * I changed the priority setting of JCsound to the first line of code so
  9248.   that, under a heavy multitasking load it will get started much faster.
  9249.  
  9250. BEGIN: JCsound v1.4
  9251. * I think there was a bug in the stereo playback.  NOW FIXED.
  9252.  
  9253. * Implemented perfect synchronization code on the stereo samples!
  9254.  
  9255.  
  9256. Does anyone ever notice a delay when loading a digital sound effect?
  9257. The OS has to load the JCsound program from disk, relocate it, run it, the
  9258. program then must open libraries and devices, allocate memory,
  9259. blahblahblah, it is quite a large amount of overhead.  But with so many
  9260. people using 040 and 060 processors these days, I'm thinking nobody has
  9261. even noticed it.  To my mind, the sounds are not instantaneous like they
  9262. should be.  But on the other hand they are ok and I have only a 25Mhz 030.
  9263.  
  9264. If you feel that the sound effects loading should be speeded up there are 2
  9265. main things I could do:
  9266. Option A:
  9267. Rewrite JCsound be pure and residentable.
  9268.  
  9269. Option B:
  9270. Rewrite JCsound to load into memory just once and get ready for accepting
  9271. commands.  Actually I had always planned to do this option years ago.  But
  9272. I don't understand exactly how to send commands to the JCsound program.
  9273. I guess I need to force myself to read more manuals and stuff.
  9274.  
  9275.  
  9276. * I Sent Zoltan the 16 new spell descriptions + the 8 new spell descriptions
  9277.   + the help files for translation.
  9278.  
  9279. *  I only sent Artur the 16 new spell descriptions. I Still need to send
  9280.    Artur the 8 new spell descriptions and the help files!
  9281.  
  9282. IDEA:
  9283. Make JCsound revert to 15k buffers if the 30k allocations fail. (?)
  9284. If that fails, go to 4k.
  9285. Would this be useful?  Do people run out of chipram, causing the sound
  9286. effects to fail?
  9287.  
  9288.  
  9289. April 2, 2001:  Imbe writes:
  9290. > i wondered if u could make a save with all creatures,undeads and growths
  9291. > packed in the board, because theoretically, it should fit, 16*16=256
  9292. > and it is over a 100 non living spells, isnt there? armour,magical attack
  9293. > and such.
  9294.  
  9295. > i know it could take a while to create it, but i would be able to see my new
  9296. > drawings immediately, instead of having to play(wich i want ofcourse :) ,
  9297. > but i like creativity more) or renaming creatures.
  9298.  
  9299. * Imbe wants a level with every single monster on it.  I had planned to do
  9300.   this for Xav many months ago but I just never got around to it and Xav
  9301.   never asked for such a thing soo...
  9302.   I hacked in some code today:
  9303.   Make a quick loop attached to the Z key to insert every ID that is a
  9304.   creature, alternating between player 1 and player 8.
  9305.  
  9306. * I made another level with all the growths in large blocks for Imbe.
  9307.  
  9308. * Robin sent in a spell file and description and sound effect for the
  9309.   Soulsucker.  The spell file and sound effect are good.  I think I liked the
  9310.   description given in the Email better than this description though.  When I
  9311.   implement this I will need to go back and read that Email. (search for
  9312.   soulsucker).
  9313.  
  9314. * Problem: My "Chaos" sound sample in Mod.ChaosTheme13 sounds pretty dorky.
  9315.   Robin processed the sample and now it sounds sorta cool.  Its very evil
  9316.   sounding!  Sounds almost demonic.  Augh!  He's revealed my true nature!
  9317.   }:>
  9318.  
  9319.  
  9320. April 3, 2001:
  9321. Try the GetMsg() thing before deleting the ports!
  9322. Do the WriteMsg() thing for how many messages were left!
  9323.  
  9324. Try opening the audio.device ONLY ONCE for both channels. (?)  Look in that
  9325. Amiga programming book!  That is how they did it!
  9326.  
  9327. * Many many many experiments and rewrites deleted.  They all crashed one
  9328.   way or another.
  9329.  
  9330. April 4, 2001:
  9331. After countless hours of trying millions of different coding techniques I
  9332. am finally giving up on the "perfect synchronization code".  The
  9333. synchronization itself sounds great and works great.  But then when I close
  9334. the audio.device *boom*
  9335.  
  9336. I talked to a lot of programmers and they all said audio.device sux.
  9337.  
  9338. They told me the only thing audio.device is good for is to allocate the
  9339. channels so that you can bang on Paula.
  9340.  
  9341. I spent a few more hours trying to recreate v1.3 of JCsound and now
  9342. finally, here it is.  A 100% working version.  It has no "perfect
  9343. synchronization code".  It is optimized a bit over 1.0 and 1.01 in that
  9344. it does less memory allocations.
  9345.  
  9346. This will be the sound playing routine for a long time to come unless you
  9347. can find serious bugs in it (or you can find a better playback routine
  9348. somewhere).
  9349.  
  9350. I can't believe I just wasted SOOOO MUCH time on this!
  9351.  
  9352. Is there sometimes a delay between the time the sound _should_ have started
  9353. and the time that it actually starts?
  9354.  
  9355. If so there are various things I could to speed up its loading and playing:
  9356. A. I could eliminate all the arexx stuff.  That should make it about 1/3
  9357.    smaller and faster to get going.
  9358. B. I could rewrite the whole thing and make it load into memory just once,
  9359.    then it would sit there and await commands.  I don't know how I would
  9360.    beam the commands to it yet... Either with PutMsg() or with Arexx.
  9361.  
  9362. AAAAUUGGH!!!  It doesn't actually work!  JCsound now works perfectly 100%
  9363. of the time on some samples and fails 100% of the time on other samples!
  9364.  
  9365. April 5, 2001:
  9366. Ok, I finally figured out the bug in audio.device!  It took 50 hours of
  9367. hacking and slashing and trial and error but I think I _finally_ have a
  9368. 100% version of JCsound that is rock solid and won't ever crash.
  9369.  
  9370. NOTE: the other versions of JCsound weren't crashing on their own, it was
  9371. actually audio.device going berserk and corrupting memory.
  9372.  
  9373. You _must_ delete all versions of JCsound v1.3 or higher that you already
  9374. have. They are TOTAL TRASH.
  9375.  
  9376. I _recommend_ that you delete all other versions of JCsound that you have.
  9377.  
  9378. I went back to JCsound v1.2 and manufactured a new v1.3 from it.  This is
  9379. the new 100% version.  I took out all perfect dual-channel synchronization
  9380. code to keep the program simple for now.  Once this new version passes
  9381. beta-testing I will _try_ to put the dual-channel synchronization code back
  9382. in.
  9383.  
  9384. JCsound v1.3 attached.
  9385.  
  9386. How to install a new JCsound:
  9387. 1. If Chaos is running then Quit chaos completely.
  9388.    I know it can be traumatic to have to quit the game but you can do it
  9389.    if you try really hard. :-D
  9390.  
  9391. 2. Unlha the JCsound file
  9392.  
  9393. 3. Copy the JCsound executable into your chaos/c/  dir
  9394.  
  9395. Tada!  That's all there is to it! :)
  9396.  
  9397. * END OF JCsound V1.3
  9398.  
  9399. April 6th, 2001:
  9400. * I carefully added 1 line of code at a time, recompiled and tested
  9401.   repeatedly, over and over, until I had all the code in to guarantee
  9402.   perfectly synchronized mono x2 and stereo sound sample playback.
  9403.   Everything seems to work perfectly!!!
  9404.  
  9405. * I then went back and redid all the FreeMem's to go in perfect reverse
  9406.   order.  This will allegedly reduce memory fragmentation.
  9407.  
  9408. * I tested JCsound a zillion times and it always works for me now.
  9409.  
  9410. Please let me know if you have any problems with JCsound V1.4 and if so,
  9411. what exactly is happening.
  9412.  
  9413. * END OF JCsound V1.4
  9414.  
  9415. I am now seriously considering removing all the Arexx code from JCsound
  9416. (does anyone care?  What real purpose does it serve?).  If I did that then
  9417. I think I could easily rewrite JCsound to be Resident and Pure!  Then there
  9418. would be 0 load time for JCsound and all sound samples should happen
  9419. instantaneously!
  9420.  
  9421. Questions: Why does Visage not work on my A1200T 060 + CGFX + OS3.9?
  9422.  
  9423. It works perfectly on my A3000 but it says it "can't find mode ?" when I type
  9424. visage df0:#? mode ?
  9425. in the shell.  It is as if OS 3.9 has a bug in the ReadArgs() function.
  9426.  
  9427. It doesn't bring up the ScreenMode requester and it always tries to display
  9428. the pix in gfx modes that my monitor doesn't support, so I can't see
  9429. anything or I see a bunch of garbage.
  9430.  
  9431.  
  9432. Does DiskSalv work on hard drives with the new FFS (bigger than 4gig
  9433. drives)?  Or will I blow up my 5 gig hard drive if I try to run it?
  9434.  
  9435. What happened to Multiview in OS 3.9?  When I type Multiview in the shell
  9436. it can't find it.  Did it get renamed or did the previous owner delete it?
  9437.  
  9438. * Played around with my new used A1200T OS 3.9 to try to become familiar
  9439.   with it.  Right this second I'm running a 640x400x64 colors Workbench in
  9440.   73Hz on the flickerfixer.  It looks very beautiful :)
  9441.   The new GlowIcons supplied with OS 3.9 are very cool!
  9442.   The hard drive in the A1200T surely makes a lot of noise...
  9443.  
  9444. * Spent a few hours on IRC talking about gfx cards, gfx drivers (I talked
  9445.   to a person who designs CGFX drivers).  I asked around if I could use one
  9446.   of my REAL Amiga keyboards instead of the lame PC keyboard, the answer was
  9447.   "probably yes".  Voodoo3 is the absolute best driver/gfxcard combo
  9448.   available on Amiga right now.  Voodoo4 and Voodoo5 drivers are crap
  9449.   because 3dfx never published the docs for them!
  9450.  
  9451.  
  9452. April 7, 2001:
  9453. * Included Xav's wild new Ghoul!  Its an improved, colorized, antialiased
  9454.   version of Imbe's Ghoul.
  9455.  
  9456. Imbe writes this idea:
  9457. recently, i played a very long game, and the spell list were burned away.
  9458. and i saw that the cpu wizards reached for the apple trees, and i did 2.
  9459. when i got a new spell, i got very exited :) . but not when i had used
  9460. it :( ,so i thought u could implement that a new apple tree or castle/temple
  9461. were created when no other means of meditation were available.
  9462. OR make a new spell that sets the wizard in a trance(meditation) and will
  9463. gain a new spell in 2-3 turns. and the spell is only given when the spell
  9464. list is empty.
  9465.  
  9466. * Included Imbe's new gfx:
  9467.   Falcon (it moves up and down very smoothly)
  9468.   Golden Dragon (I antialiased it some more)
  9469.   Gravity Sphere (What is it?  It looks nothing like a sphere. :)  But it
  9470.        looks better than the old gfx so I'm using it.  I antialiased it.)
  9471.   Grizzly Bear: He added a frame and changed some frames. (There was a bug:
  9472.                 a line of hard black color #32 in the corpse. Now Fixed.)
  9473.   Ok, I watched the Grizzly Bear in the game and this animation still needs
  9474.   some work, it jumps badly in one spot.  It needs 1 more frame between the
  9475.   last frame and the next-to-last frame.
  9476.  
  9477. * I put these Imbe gfx into unused gfx:
  9478.   Goblin and Goblin Bomb:  They have more frames of animation so I might
  9479.   use them.. I donno.  But I like the colors of the old Goblins... so I am
  9480.   thinking of using these new Goblins as completely new creatures.
  9481.  
  9482.   Gooey Blob: It looks good but I like the old Gooey Blob.  I have been
  9483.   planning a new growth.  I can use this one for the new growth.
  9484.  
  9485.   Gorilla: I want to use this one as some sort of extra mean Gorilla.
  9486.  
  9487.   Vulture: I am thinking of using this as the Pterodactyl.  Perhaps with
  9488.   more grayish colors.
  9489.  
  9490. * MORE audio.device strangeness. (Letter to FD)
  9491.  
  9492. What is going on?  I thought the music system allocated the sound
  9493. channels at max priority!????
  9494.  
  9495. Yet everytime I write a new email in YAM while the music is playing and
  9496. I double-click on someone's name it makes a beep!  It steals a channel from
  9497. the music system!  Isn't this supposed to be impossible!?!?
  9498.  
  9499. This freaks everything out.  After this happens the music sounds strange
  9500. and if I play JCsound after this happens it goes crazy... but it hasn't
  9501. crashed yet.  Everything is bonked out.
  9502.  
  9503. Can you set the music system to allocate all 4 channels at MAX priority so
  9504. that they cannot be stolen?   Merci Danke Thank you Muchas Gracias :)
  9505.  
  9506.  
  9507. * I trimmed down the Generator gfx to only go through each color once.
  9508. * I double antialiased Imbe's Twirl effect and now it looks better.
  9509.  
  9510. * BUG! THE SPELLS GADGET IS BROKEN!  Now matter how many spells you say you
  9511.   want, you always get 99.  I wanted to play a quick game with only 10 spells
  9512.   and I noticed this! How long has it been like this? Ever since I added that
  9513.   code to put your bonus spells at the top of your list.
  9514.   So its been broken since December 31, 2000.  NOW FIXED.
  9515.  
  9516. * BUG: Play an exploration game as player 1  against a computer player 8.
  9517.   Now load a game of a human player 8 vs. a computer player 1.  You will
  9518.   see the position of the enemy Player 1  for a second in the beginning!
  9519.   This is cheating!  NOW FIXED!
  9520.  
  9521.  
  9522. Imbe Writes:
  9523.  
  9524. > Bugs:
  9525. >trytoshootinradioactive:
  9526. >i tried to shoot at radioactive with my elf, and he died (he's laying next
  9527. > to my other elf), try to shoot with the other elf and you'll see.
  9528.  
  9529. That is not a bug.  That is a rule of the game.  It does seem strange to me
  9530. but it does provide a risk to shooting unexplored squares.
  9531.  
  9532.  
  9533. > beforetwirlbytopguyinhvite:
  9534. > i chose alliance and the jcsound must have crashed again by the top
  9535. > hvite wizard.
  9536.  
  9537. What does "hvite" mean?
  9538.  
  9539. Jeg tudok nei Norsk.  English takka du. :)
  9540.  
  9541.  
  9542. Thank you for the sound bug report.  I couldn't duplicate the bug so I
  9543. can't fix it.  It is probably just another bug in audio.device.
  9544. audio.device sux! :(
  9545.  
  9546. April 8, 2001:
  9547. * FIXED some stupid bugs in the AI.
  9548.  
  9549. April 9, 2001:
  9550.  
  9551. Mod.ChaosTheme62 caused some enforcer hits when it started.
  9552. Last line of WriteText() function (Text (rport, (char *)text, strlen(text));
  9553. Called by WriteNearBottom() (last line)
  9554. Called by Chaos.c GetSpellSelection() (line 3773)
  9555.  
  9556. The ChaosPearl.font in memory was overwritten with part of the
  9557. XPKSQSH.library!!!!  I know this because I could read the version info of
  9558. XPKSQSH inside the font struct.  The whole font struct was mangulated.
  9559.  
  9560. I tried several times to duplicate this bug without playing that mod.  I
  9561. couldn't make the bug happen again.  So I think this means it is a 90%
  9562. chance that the bug is in XPKMaster.library.
  9563.  
  9564. * Resaved Mod.ChaosTheme61 from XPKSQSH to normal uncompressed format.
  9565.  
  9566.  
  9567. April 10-12, 2001:
  9568. Spent many hours reading faqs and readme files about various pieces of
  9569. hardware and software on the A1200T.  Fiddled around with many MUI
  9570. settings.
  9571.  
  9572.  
  9573. Friday the 13th, April 13, 2001:
  9574. * Included Artur's 8 new polski spell descriptions.
  9575.  
  9576. April 14, 2001:
  9577. On 14-Apr-01, Robin Schmidt wrote:
  9578. > Hi!
  9579. > I don't know whether you fixed /this/:
  9580. > /My/ Magic Carpet was occupied by an allied wizard.
  9581.  
  9582. In the current version it is impossible for Wizards to occupy allied Magic
  9583. Carpets.  But once I send you the new version you can test it just to be
  9584. sure. :)
  9585.  
  9586. > When I moved the Carpet,
  9587. > I saw, that the 'dismount D' was enabled, so I thought: 'Cool, now I can
  9588. > kick this wizard from my carpet and use it for myself!' But when I
  9589. > dismounted, *not* the other wizard appeared, but */mine/* again! So I
  9590. > replicated my wizard!?!
  9591. > I'm not sure what will happen next turn...
  9592. > The Carpet stayed occupied, but at least I could create new wizards each
  9593. > turn! :)
  9594. > You said, you fixed all Magic Carpet bugs in your version that you're going
  9595. > to send me ASAP. But this one seemed to me so very special, I just HAD to
  9596. > tell you about it! :)
  9597.  
  9598. Hehehe, it does sound very funny! :)
  9599.  
  9600. * Included Artur's Polski help files.
  9601.  
  9602.  
  9603. April 15, 2001:
  9604. * I set up a parnet network between the A3000 and the A1200T.
  9605.   First I installed Parbench31.lha from aminet but that was crap because it
  9606.   kept generating enforcer hits from location 32 and it was slow.
  9607.   So I downloaded and installed parnet.device 2.1 and now everything works
  9608.   great!
  9609.  
  9610. Timing test 1
  9611. I copied games:devcd/AmigaDeveloperCD_1.1.lzx to t:  (20173265 bytes)
  9612. Games: had only 30 buffers.  T: was in the RAM: disk as usual.
  9613. It took 415 seconds = 48610 bytes per second.
  9614.  
  9615. copy the same file as above but this time games: had 530 buffers.
  9616. SAME SPEED 415 seconds.
  9617.  
  9618. copy games:devcd/AmigaDeveloperCD_1.1.lzx to work:
  9619. 421 seconds.  (Work: had 450 buffers) 47917 bytes per second.
  9620.  
  9621. * I downloaded bustest off of aminet on the DSL connection and uhmm..
  9622.   I'VE BEEN RIPPED OFF!  I HAVE THE SLOWEST 060 ACCELLERATOR IN THE
  9623.   UNIVERSE!  The only reason I paid $1075.00 for this Amiga was because
  9624.   Apollo was supposed to be the fastest!  (And Apollo _040_ accellerators
  9625.   were faster in the tests).  But the Apollo boards are obviously optimized
  9626.   for 040 and suck for 060 because the Blizzard 060 cards are about 6
  9627.   megs/sec faster than the Apollo 060 cards!!!!  This is terrible when using
  9628.   a gfx card!  You need to be able to push as much data as possible as fast
  9629.   as possible!
  9630.  
  9631.   I could only find 1 guy on irc who had an Apollo 060 and his timing
  9632.   results were similar to mine.
  9633.  
  9634.  
  9635. April 16, 2001:
  9636. * Studied 060 asm coding techniques.
  9637.  
  9638. * I checked version of every single file in my A3000 and A1200T L: DEVS: C:
  9639.   and LIBS: and copied over the files if needed.  Parnet rules!
  9640.  
  9641. I skipped copying over AHI stuff and Xpk stuff.  I also didn't copy over
  9642. some other old things that I never use or don't like.
  9643.  
  9644. Make an lha backup of Workbench: and Work: and copy them over to the A3000
  9645. for storage.  They are on CD_Image2:A1200TBackup/  DONE.
  9646.  
  9647. 2. Figure out how I am going to format the rest of the drive.
  9648.    A: A 700 meg Chaos: partition?
  9649.    B: All the rest of the drive as a huge GAMES: partition?  OOPS!
  9650.       There is ALREADY a 1 gig GAMES: partition!
  9651.    C: Perhaps 3 700 meg partitions?
  9652.  
  9653.  
  9654. April 17, 2001:
  9655. It took all day to lha my A3000 Chaos: partition.  Lha would work for hours
  9656. then fail.  I guess it was running out of memory or fragmenting memory so
  9657. badly that it would fail.  I deleted tons of stuff first which reduced the
  9658. partition down to 350 megs and 100's of thousands of files.  After lha
  9659. failed I transferred over the Dev CD and the Cats CD by themselves and
  9660. deleted them + I found 2 old temp versions of Chaos and deleted them this
  9661. totalled many thousands of files which greatly reduced the memory needs of
  9662. lha.  Then I lha'ed the remaining stuff (Something like 290 megs) and after
  9663. many MANY hours it finally produced a 142 meg file.  I transferred the file
  9664. over parnet while watching the season finales of Buffy and Angel.
  9665.  
  9666. April 18, 2001:
  9667. At Artur's request I Spent more hours reading over Chaos/audio.c and
  9668. JCsound to see if I could see any problems.  I couldn't find anything
  9669. suspicious.
  9670.  
  9671. April 19, 2001:
  9672. Robin reports:
  9673. >* BUG: Tribal Dance mod doesn't play when casting Tribal Dance.
  9674.  
  9675. This was very strange because it had always worked for me but I finally
  9676. figured it out.  I was playing the mod CreatureName(spell) which uses the
  9677. name of the spell IN THE CURRENT LANGUAGE.  Thus the mod would not play in
  9678. any language other than English.  I have now changed it to the correct
  9679. creature_name[spell].  NOW FIXED.
  9680.  
  9681.  
  9682.  
  9683. * RACE!  A1200T 50Mhz 060 vs. A3000 25Mhz 030
  9684.   A1200T uses IDE and A3000 uses SCSI.
  9685.   A1200T uses OS memory routines.  A3000 uses Poolmem.
  9686.   Both systems are using 500 drive buffers.
  9687.   The races will be to compile the current version of Chaos.
  9688.  
  9689.   Compile a developer version of Chaos from scratch:
  9690.   A1200T 03:31 (211 seconds)
  9691.   A3000  16:05 (965 seconds)
  9692.  
  9693.   A1200T wins the race!  4.57x faster than A3000!
  9694.  
  9695.  
  9696.   Compile a release version of Chaos with full optimizations from scratch.
  9697.   A1200T 09:54 ( 594 seconds)
  9698.   A3000  52:12 (3132 seconds)
  9699.  
  9700.   A1200T wins the race!  5.27x faster than A3000!
  9701.  
  9702.   The A1200T SHOULD be a lot lot faster!  But I made the mistake of buying
  9703.   the SLOWEST 060 card in the known universe (Apollo 060) which has very very
  9704.   slow memory accesses. :(
  9705.  
  9706.   If the SASC compiler was optimized to make use of the 060's dual pipeline
  9707.   I think that the 060 would perform 6x as fast as the 030.
  9708.  
  9709.  
  9710. * Studied possible ways of using other sound cli programs and how in the
  9711.   world to know when they have finished running.
  9712.  
  9713.  
  9714. April 20, 2001:
  9715. Ever since I got my A1200T I've been having strange problems.
  9716.  
  9717. 1. Ibrowse 2.2 shows garbage for its icons and default image thingys.
  9718.  
  9719. 2. Dpaint 5 goes berserk and corrupts memory when loading any brush.  It
  9720.    corrupts the mouse pointers on all screens, the gfx on the Dpaint screen
  9721.    and spews TONS of garbage all over the workbench screen.  This is stupid.
  9722.  
  9723. Everything worked perfectly on the old A3000.
  9724.  
  9725. At first I just assumed this was a bug in OS 3.9 but now I have proved that
  9726. it is a bug in cybergraphics.library.
  9727.  
  9728. NOTE: I AM NOT USING CYBERGRAPHICS.LIBRARY!  I HAVE OPENED 0 SCREENS ON THE
  9729. GFX CARD!  I AM NOT USING THE LIBRARY IN ANY WAY!
  9730.  
  9731. But just _HAVING_ the ElboxVirge monitor driver in my devs:monitors/ causes
  9732. cgfx to do evil patches to my OS which corrupt all my AGA software!
  9733.  
  9734. I have now removed the ElboxVirge monitor driver and now all my AGA
  9735. programs are working perfectly.
  9736.  
  9737. At the moment there is NO WAY to have AGA and my gfx card coexist 100%! :(
  9738.  
  9739. I must do EVERYTHING on AGA or EVERYTHING on cgfx.  THIS TOTALLY SUX!
  9740.  
  9741. I need to be able to, in the future, run Ibrowse and workbench on the gfx
  9742. card to save tons of chipram while running Dpaint 5 and Chaos on AGA.
  9743.  
  9744. Ok, I found the problem: There are some env: variables that control certain
  9745. patches of cybergraphics.library.  Some of the patches are called
  9746. Planes2Fast, Supergels and SuperLayers.  Manius says Planes2Fast was
  9747. causing this problem.  It makes sense so all I have to do is turn off these
  9748. patches to make things work correctly.
  9749.  
  9750.  
  9751. * I studied the proposed new 256 color palette and did various tests and
  9752.   made observations.
  9753.  
  9754. * I made a new version of JCsound based on FD's theory for the audio.device
  9755.   bugs. (v1.4x  x=eXperimental)  Sent it to Artur for testing.
  9756.   Robin and Artur report that it works perfectly in the shell in mono in a
  9757.   15.75Khz screenmode but that it does not work in a 30Khz screenmode with
  9758.   the -2 option.
  9759.  
  9760. April 21, 2001:
  9761. * I made a proposed AGA palette alpha version 1 with 125 defined colors
  9762.   which contains all the existing ECS colors + more shades.  Sent it to
  9763.   Xav and Robin for comments, complaints, criticisms, etc.
  9764.  
  9765. * I made yet another new version of JCsound with some changed code for the
  9766.   -2 option. (V1.4x1)  Sent it to Artur and Robin.  Now I made 1.4x2 and
  9767.   sent it to them.  They report this one works perfectly.
  9768.  
  9769. * The final bug in JCsound was that I was doing CMD_WRITE to the left
  9770. channel then to the right channel.  So I just assumed that the left channel
  9771. would finish first and the right channel would finish last.  But some times
  9772. (all the time?) the buffers finished in reverse order!  So JCsound would
  9773. get a signal from the right port FIRST then a little later a signal would
  9774. arrive from the left port.  If the signals had arrived in the correct order
  9775. or AT THE SAME TIME as I assumed then things would have been working
  9776. perfectly for a long time.  Anyway its all NOW FIXED.
  9777.  
  9778. {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
  9779.  
  9780. * NEW GFX FROM IMBE!
  9781.   I put the following gfx into gfx/UnusedGfx/Imbe/
  9782.   brightcreature.incomplete
  9783.   Hand Grenade
  9784.   Halfling (He looks very evil.  He looks undead.  Perhaps this could be an
  9785.      evil halfling?  Or some sort of undead creature?
  9786.   Haste
  9787.   Gryphon:  I think this gfx looks too big and bulky to be a Gryphon.
  9788.      I am renaming this to Gargoyle Wings  this can be the Gargoyle
  9789.      creature when it has been hit with a Fly spell.  We still need a
  9790.      standard version without the wings and someone needs to design the
  9791.      stats and abilities of a Gargoyle creature.
  9792.   Wizard 4.incomplete: Why is this incomplete?  Hmm...
  9793.     On the one hand I like it like it is
  9794.     On the other hand I like the current Wizard 4 flying around guy
  9795.     On the third hand the flying wizard guy could be a Genie of some sort.
  9796.     On the fourth hand this Wizard 4.incomplete looks like he is made of
  9797.     clay so I don't know what to do with him.  Since Imbe says he is
  9798.     incomplete I will just put him into gfx/UnusedGfx/Imbe/ for now.
  9799.  
  9800.  
  9801.  
  9802.   INCLUDED These gfx:
  9803.   Alliance: I antialiased it a little bit and included it + sent it to Xav
  9804.      so he can manufacture a new Separation based on this.
  9805.   Wizard 1: Hopefully Xav can anti-alias the wand for me. :)
  9806.             Note to Imbe: What is that yellow stuff doing to him?  It
  9807.             looks like his magic orb is attacking him. :)  Or maybe his
  9808.             spell is backfiring on him?
  9809.   Wizard 2: Very nice!  Very good rotation!
  9810.   Wizard 3: Very nice!
  9811.   Wizard 8: CowaFreakinBunga!  I put the "old" Wizard 8 into
  9812.             gfx/UnusedGfx/Imbe/ just in case.
  9813.  
  9814.  
  9815.  
  9816.   I'm still deciding what to do with:
  9817.   Harpy: It looks very cool.  But I'm unsure if this should be a Harpy or
  9818.          a Bird Lord or ???
  9819.   Wizard 7: It looks great.  But so does the current Wizard 7.  What am I
  9820.             to do?
  9821.  
  9822.  
  9823.   CellEffect/heal.incomplete  I like this.  I am planning to use it for
  9824.     Heal, Recover Boost, Brain Boost, etc.
  9825.  
  9826. {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
  9827.  
  9828. April 22, 2001:
  9829. Today was the first day that I played Chaos on the A1200T AGA.  Ack!
  9830.  
  9831. 1. Hires monitor
  9832. I've been playing Chaos on a 1084S monitor with .42mm dot pitch for years.
  9833. The gfx look nice.  But on my Commodore 1960 monitor with .28mm dot pitch
  9834. the gfx look very bad.  You can see each and every square pixel.  Yuk.  The
  9835. AGA version FOR SURE needs 640x512 resolution to counteract this problem.
  9836.  
  9837. 2. Sprite corruption
  9838. For some reason loading Chaos corrupts the mouse sprite on all my other
  9839. screens.  I guess the OS can't handle 1 task using a lores sprite and
  9840. another task using a hires sprite.  It looks horrible!  How do I fix
  9841. this???  Or should I just wait till the game opens AGA screens and then the
  9842. problem will automatically disappear?
  9843.  
  9844. 3. The first time I load Chaos the intro screen is in NTSC, which is wrong.
  9845. The next time I load Chaos the intro screen is in PAL.  The intro screens
  9846. are still being opened using the lame old OS 1.3 routines.  I have now
  9847. rewritten the intro screens to open using the OS 3.0 OpenScreenTags()
  9848. like alll the other screens in the game.  NOW FIXED.
  9849.  
  9850. * Investigated other theoretical problems in JCsound but couldn't find
  9851.   anything wrong.
  9852.  
  9853. * I did FD's suggestion to do the CloseDevice() related code in perfect
  9854.   reverse order.  This didn't seem to make any actual difference but it might
  9855.   in the future and I added code to check for this and report any messages
  9856.   returned from CloseDevice() into T:JClogfile.
  9857.  
  9858. April 23, 2001:
  9859. * Spent all day talking to programmers about gfx card programming
  9860.   techniques and how to make programs residentable.  It turns out that
  9861.   making a residentable program is TOTALLY EASY in SASC!!!
  9862.   But the only example resident program I had ever looked at was a real
  9863.   pain because everything had to be rewritten to a more complicated syntax.
  9864.   This example program was obviously made for use with inferior compilers.
  9865.  
  9866. April 24, 2001:
  9867. * I released v1.5 of JCsound with proper Stereophonic playback support and
  9868.   extra error checking and fully residentable for playtesting.
  9869.  
  9870. * UPDATED Chaos to quit running JCsound from the RAM:c/ dir and to use the
  9871.   resident version instead.  This saved 216 bytes on the size of the
  9872.   executable.
  9873.    JCSOUND RESIDENT ADVANTAGES:
  9874.    Loads faster!  (Actually it doesn't load at all! It is already loaded!)
  9875.    Can run 4 copies of it at the same time without burning any extra code
  9876.    memory.
  9877.  
  9878. * UPDATED the documentation to include info about the Blood option.
  9879.  
  9880. April 25, 2001:
  9881. * BUG: when creatures come into being who belong to a dead computer wizard,
  9882.   the human gets to control them!  The computer should control these
  9883.   creatures!  NOW FIXED.
  9884.  
  9885. * ELIMINATED ram:ChaosDir/  It is no longer used.
  9886.  
  9887. * MODIFIED the speech system with error checking similar to that used by
  9888.   JCsound then played half a test game.  No bugs detected.  But I did hear
  9889.   certain sound effects start with unsynchronized left/right channels.
  9890.   The speech sounded wierd a few times also.
  9891.  
  9892. April 26, 2001:
  9893. * AUTOSAVING is very fast on 50Mhz 060!
  9894.  
  9895. * ENFORCER won't work on my 060!!!!  Aaauuggh!!!!  This sux!  Chaos will
  9896.   start becoming very badly bugged without enforcer running!  I assume this
  9897.   is caused by RemApollo. (?)
  9898.  
  9899. * Multitasking speech added.  When you click on a monster and speech is
  9900.   activated the speech plays in the background (asynchronously).
  9901.   I played a test game and it works perfectly.
  9902.  
  9903. * BUG: After casting Seismology the Heal spell sets your feel range,
  9904.   smell range and hear range to 7.1!  NOW FIXED.
  9905.  
  9906. April 27, 2001:
  9907. ------------------------------------------------------------------------
  9908. Robin's New CellEffects:
  9909.  
  9910. CastFlames: Included as Fireball1.  This is currently only used when
  9911. casting a Fireball onto something.  Should it be used for anything else?
  9912. Its very long (over 100 frames) and I'm running out of chipram so I
  9913. shortened it down to just a few frames.
  9914.  
  9915.  
  9916. CastGfx: Looks wild!  I must use this for something!  But what?
  9917. I'm putting it into UnusedGfx/Robin/ for the moment.
  9918.  
  9919. CastGood: Included as DemonicDoorway.  This is used when casting a
  9920.  demon/devil/higher devil/elemental.
  9921.  
  9922. DemonID,DevilID,HDevilID,FDemonID,EFireID,EAirID,EWaterID,EEarthID,
  9923. GrimReaperID
  9924.  
  9925.  
  9926. CastRing:
  9927. I'm including the Green one as Toxicity. This effect will be used by all
  9928. the "Beam" spells. (Lethargy Beam, Toxicity Beam, etc.)  All of them except
  9929. Plasma Beam.
  9930.  
  9931. There are many other nice looking CastRing fx!
  9932. I don't know what to use the other castrings for!?!?!  aaaahg!
  9933. They are residing in UnusedGfx/Robin/
  9934.  
  9935.  
  9936. CastWarp: Included as UncertaintyAppearance (I can't think of anything
  9937. else to call it.)  I removed the ending frames.  I antialiased the circles.
  9938. This is now used by the Uncertainty spell when new creatures magically
  9939. appear onto the board.  This one worked out really well!!!!
  9940. -------------------------------------------------------------------------
  9941.  
  9942. Put in Imbe's heal fx as "HealingSpell" for:
  9943. Recover Boost
  9944. Brain Boost
  9945. Heal
  9946. Magic Shield
  9947.  
  9948. Any others?
  9949.  
  9950. * Played a test game to test all the new cell effects.  Everything seems to
  9951.   work perfectly.
  9952.  
  9953. * There are now 2353 tiles in the game consuming 451K of chipram!  That's
  9954.   just for the tiles!  That doesn't count GUI images, sprites and screen mem.
  9955.   And remember I left out 80 of Robin's fire tiles to save 15K of chipram.
  9956.   This is a very good reason to start the AGA version development because
  9957.   the AGA version will store all tiles in fastram.
  9958.  
  9959.  
  9960. April 28th, 2001:
  9961. * I spent most of the day playing a full complete game of Chaos.  I didn't
  9962. win until turn 62.  I played against 7 Ruthless computer wizards who were
  9963. in an alliance against me in a dungeon of Force Walls with 4 generators and
  9964. 10 scrolls.  Exploration mode was off.  It was really hard.  They kept
  9965. ganging up on me.  2 Wizards on the opposite side of the board from me kept
  9966. casting horrible spells against me because one had an Oracle and the
  9967. otherer had Depth!  I had no way to stop them!  I lost a LOT of creatures
  9968. in this game!!!  One time they cast Ditzy Blonde on my undead Emerald
  9969. Dragon.  I just _knew_ they were going to cast subversion on it the next
  9970. turn so I had to cast Brain Boost on my Emerald Dragon.  And sure enough,
  9971. as soon as I clicked on my Emerald Dragon and the gfx effect was over, the
  9972. evil enemy wizard tried to subvert my Emerald Dragon!!  Its been months
  9973. since I bothered to cast a Brain Boost; I'm really glad I did this time!
  9974.  
  9975. I won with 1972 points.  The opposing team had about 2500 points.  They
  9976. killed a lot of stuff including many Force Walls.
  9977.  
  9978. The sounds acted strange sometimes; sometimes the sound would start playing
  9979. on the left and the right but then one channel would stop partway through
  9980. and only the other channel would play the rest of the way.  I have no idea
  9981. how this can be possible.
  9982.  
  9983. No real bugs to report.
  9984.  
  9985. April 29th, 2001:
  9986. ************************************************************************
  9987.                    100% TRANSLATIONS UPGRADE
  9988. ************************************************************************
  9989.  
  9990.  
  9991. I was originally going to have lists with "M" and "F" variations but I
  9992. think there is a shortcut if we use "" for male and "e" for female.  This
  9993. will shorten and simplify the catalog lines.
  9994.  
  9995. If you don't like it then you can make your own system.
  9996.  
  9997. This is just an example of 1 possible way to do things.  I'm sure there are
  9998. many other ways that are just as good, or better, than this way.
  9999.  
  10000.  
  10001. PERFECT FRENCH TRANSLATIONS!!!!!!!!!!!!!!!!!
  10002.  
  10003. BEGIN_LIST {GENDEROFLoup}
  10004. *
  10005.  
  10006. BEGIN_LIST {GENDEROFHarpie}
  10007. e
  10008. *
  10009.  
  10010. BEGIN_LIST {SUBJECTGENDER}
  10011. Le
  10012. *
  10013.  
  10014. BEGIN_LIST {OBJECTGENDER}
  10015. un
  10016. *
  10017.  
  10018. BEGIN_LIST {SUBJECTGENDERe}
  10019. La
  10020. *
  10021.  
  10022. BEGIN_LIST {OBJECTGENDERe}
  10023. une
  10024. *
  10025.  
  10026. {SUBJECTGENDER{GENDEROF%2$s}} %2$s de %$1s est promu{GENDEROF%2$s} en {OBJECTGENDER{GENDEROF%3$s}} %3$s
  10027.  
  10028.  
  10029.  
  10030. BEGIN_LIST {dissous}
  10031. dissous
  10032. *
  10033.  
  10034. BEGIN_LIST {dissouse}
  10035. dissoute
  10036. *
  10037.  
  10038. In French you could return "e" for female and "" for male
  10039. (GENDEROF function).  This would be a shortcut.
  10040.  
  10041. In this way you don't have to list EVERY verb into the talklists file,
  10042. only the "irregular" ones.
  10043.  
  10044.  
  10045.  
  10046. THIS PROPOSAL REQUIRES:
  10047. 1. NULL lists MUST be handled properly!  They should return a pointer to a
  10048.    NULL string! (first byte of the string is 0) DONE.
  10049.  
  10050. 2. There is a bug in OS RawDoFmt() which means that you cannot supply a
  10051.    format string which only uses some of the format paramters!
  10052.    Tsprintf(text_store, "%1$s %2$s","P1","P2","P3"); freaks out and doesn't
  10053.    work!  I found this out when working on Robin's scavenging texts.  One
  10054.    of his paramters (%3$s) is NOT in the orignal catalog file!  It is contained
  10055.    in the talklist file!  This SHOULD work perfectly but it doesn't.  I hacked
  10056.    around this bug by simply doing ReplaceLists() first then plugging in the
  10057.    parameters.
  10058.  
  10059. 3. Strangely you can supply the same parameter over and over as in:
  10060.    Tsprintf(text_store,"%1$s %3$s %3$s %2$s %1$s","J1","J2","J3");
  10061.    I tested this a few different times and it always seems to work.
  10062.  
  10063. 4. I modified ReplaceLists() to 100% handle nested lists.
  10064.  
  10065. 5. The code in Chaos that builds the spell description lists must also
  10066.    build a talklist file with all creatures and genders.  This file is
  10067.    stored in the TalkListsDir/  DONE.
  10068.  
  10069. 6. Add in some code to read the gender byte from description files.
  10070.    If there is no gender byte just assume NULL. ("")  DONE.
  10071.    For some reason I coded this in such a way that the gender info can only
  10072.    be 1 byte.  This byte may be omitted.  If this is a problem then let me
  10073.    know.
  10074.  
  10075. 365 different
  10076. BEGIN_LIST {GENDEROFSnake}
  10077. e
  10078. *
  10079.  
  10080. BEGIN_LIST {GENDEROFGreen Dragon}
  10081. *
  10082.  
  10083.  
  10084. PLEASE NOTE:  In order for this new fancy perfect translations thing to
  10085. work I must add a hunk of code to each individual place in the program that
  10086. makes use of it.  At the moment I have only added this code to the
  10087. scavenging string (Line 49).  Once someone has tested this new system and
  10088. verified that it actually works then I can add the code hunk to all the
  10089. other needed catalog lines.  This code hunk uses a variable number of
  10090. parameters and I have no idea how to code a routine to work with it.  I'm
  10091. not sure it is possible to reduce this into a subroutine.  Perhaps Sean
  10092. should look at this.
  10093.  
  10094. ************************************************************************
  10095.                    END 100% TRANSLATIONS UPGRADE
  10096. ************************************************************************
  10097.  
  10098.  
  10099. April 30, 2001
  10100. I downloaded Multiplayer and Hippoplayer from Aminet then I listened to
  10101. each protracker song to figure out if it was messed up or not.  The problem
  10102. is that the protracker replay routine in Chaos is _VERY_ old and it is not
  10103. 100% 060 compatible because it doesn't wait long enough after issuing a
  10104. write to the audio hardware for it to take effect.  The easy solution is
  10105. simply to convert any wrong-sounding protracker mods to med format:
  10106.  
  10107.  
  10108. 1
  10109. 17 is messed up around 34-36 convert it!  This mod somehow shrank from
  10110.    406K->401K when I converted it to MMD1 format. Strange.
  10111. 20 is messed up!
  10112. 21 is messed up at pattern 30!!
  10113. 23 is messed up in the beginning and all over!
  10114. 32 is messed up at the end (fade out doesn't fade out).
  10115. 36 I think is messed up in patterns 4-6 the "wooh" instrument isn't fading
  10116.    out?  I'm not sure about this.  I'll just convert it to be safe.
  10117.    This reduced the filesize from 292K->284K. Strange.
  10118. 37 is messed up right from the beginning.
  10119. 40 is messed up an instrument doesn't fade out correctly.  Then around 5 it
  10120.    messes up really badly!
  10121.  
  10122.  
  10123. 51 is totally messed up!  Convert this to med then TEST IT!
  10124.  
  10125. 58 fades in all wrong and sounds terrible!
  10126. 59 is messed up.
  10127.  
  10128. I installed OctaMed SoundStudio Professional v1.03c onto the A1200T to
  10129. convert the mods.  All above mods converted and tested.  NOW FIXED.
  10130.  
  10131.  
  10132. 41 WHAT THE HELL!?!?  This is the artifact/scavenging music but its in
  10133. protracker format with no subsongs!?!?!?  Recover this from my A3000!!!!
  10134. Find #42 in an old version!  DONE. FIXED.
  10135.  
  10136.  
  10137. Test if Subsongs work correctly now that I have fixed JCsound (?)
  10138. Luckily I left all the old subsong/jcsound testing code in the game but
  10139. commented out.  I will just uncomment it now and give it a whirl.
  10140.  
  10141. Hmmm... well... Sometimes the ghost sound starts out VERY unsynchronized
  10142. immediately after playing a subsong.  But no permanent damage seems to be
  10143. done.
  10144.  
  10145. * RISKY MANEUVER: I am taking out the hacked code to work around the
  10146.   "subsong followed by JCsound crashes bug" since it seems to work ok now.
  10147.   This will solve the glitchy sound at the end of every subsong.
  10148.   Subsongs are only used for scavenging and artifact changing.
  10149.  
  10150. * Updated the credits section of the docs.
  10151.  
  10152.  
  10153. May 2, 2001:
  10154. * Conduct a test:  Run the ElboxVirge cybergraphics driver then play Chaos
  10155.   and load and save the game to see if everything works or not.  It seems to
  10156.   work ok but I didn't play very long.
  10157.  
  10158. * Included Imbe's Harpy.
  10159.  
  10160. * BUG: The new 100% translations code is crashing when I select a
  10161.   nonexistent language such as Italiano.  NOW FIXED.
  10162.  
  10163. * Compiled version 3.3.  Main executable = 434552 bytes.
  10164.  
  10165. * Updated the ChaosHeavy.readme and sent it off to be translated.
  10166.  
  10167.  
  10168. Thursday May 3, 2001: WILD stuff on the news today!!!!!!!!!
  10169.  
  10170. * Included Artur's new Polski SetupScreen2.iff and Polski.catalog.
  10171.  
  10172.  
  10173.  
  10174.